WebMagic简明教程(⼀)
WebMagic简明教程(⼀)
前⾔
做项⽬需要爬取⼀些数据,不想⽤Python,就尝试了下webmagic这个爬⾍框架,总的来说上⼿还是⽐较简单的,这⾥来总结⼀下. webmagic是⼀个简单灵活的Java爬⾍框架,如果你熟悉Java⽽且不想⽤Python写爬⾍,那么webmagic是⼀个不错的选择.
实战
⽇常前戏
1. ⾸先呢,咱们来先把jar包下载下来:
或者到我的百度云下载:
2. 将jar包倒⼊⼯程中,这步应该都没什么问题吧QAQ(如果有问题请私信我或者留⾔,这⾥就不过多说了)
爬取⽹站源码
好了,终于来到了爬取阶段,以爬取题库⽹为例:
ok,上代码:
package com.xiaokangchen.spider.service;
decraft.webmagic.Page;
decraft.webmagic.Site;
decraft.webmagic.Spider;
decraft.webmagic.processor.PageProcessor;
/*1.实现PageProcessor接⼝*/
public class QuesPageProcess implements PageProcessor{
/*2.设置抓取⽹站的相关配置*/
private Site site = ().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);
@Override
public Site getSite() {
// TODO Auto-generated method stub
/*3.返回site*/
web下载官方下载return site;
}
/*5.爬取逻辑*/
@Override
public void process(Page page) {
// TODO Auto-generated method stub
page.putField("html", Html());
String pageHtml = ResultItems().get("html").toString();
}
/*4.爬取*/
public static void main(String[] args) {
/*添加爬取的url链接,开启5个线程爬取*/
Spider spider = ate(new QuesPageProcess())
.addUrl("www.tiku/testPaper.html?sct=0&cn=%E6%95%B0%E5%AD%A6&st=2&cid=500004&bid=800009&vid=800005&uid=800003&cptid= 700005&kid=700124&qtid=600050&difficulty=&sort=0")
.thread(5);
/*爬⾍启动*/
spider.run();
}
}
1. ⾸先我们需要实现PageProcessor接⼝,实现getSite()⽅法和process()⽅法.
2. 设置抓取的相关的配置Site,⽐如重试次数、抓取间隔等。如果出现看不懂、记不住等疑难杂症,直接先设置成和我的⼀样就可以了,等以后写的多了⾃然懂了(逃
3. 把刚刚设置的site返回.
4. 在main()⽅法中调⽤Spider的⼀个静态⽅法static Spider create(PageProcessor pageProcessor)⽅法来创建⼀条爬⾍,并且添加Url链接,开启五个线程,最后⽤run()⽅法启动.
这⾥还可以设置下载调度器(Scheduler)像FileCacheQueueScheduler缓存爬取到的url和已经爬取的位置来实现程序中断后继续从当前位置爬取,也可以设置RedisScheduler使⽤Redis来实现多机器分布式爬取.
⾄于为什么run()⽅法单独⽤spider去调⽤,以及为啥还搞个Spider spider = ,不直接写
.addUrl("www.tiku/testPaper.html?sct=0&cn=%E6%95%B0%E5%AD%A6&st=2&cid=500004&bid=800009&vid=800005&uid=800003&cptid= 700005&kid=700124&qtid=600050&difficulty=&sort=0")
.thread(5).run();
因为我们可以在这⾥调⽤监控器来监控爬取的情况,下⼀节我们会将监控器加⼊进来.
5.爬取逻辑,也是核⼼部分,在这⾥我们将提取页⾯中的元素、属性、url,以及添加后续要爬取的url,也就是我们在这⾥获取页⾯中我们想要的哪些数据,这⾥我们简单地写⼀个
page.putField("html", Html());
这句代码的意思是获取整个页⾯的Html代码,并且将其存到LinkedHashMap中,⼤家学过Map集合的话都应该知道键值对,不知道也没有关系,第⼀个”html”是键,第⼆个Html()是值,我们通过键可以获取到值.
然后我们⽤
String pageHtml = ResultItems().get("html").toString();
来获取刚才的值,这是页⾯的全部Html代码,咱们⽤ut()打印⼀下刚才的页⾯。⼤家会发现控制台中打印了⼀次红⾊的Html 代码。红⾊的便是我们输出的pageString。这样,咱们就获取到了页⾯的源码,之后我们来讲解如何获取后续url实现⾃动爬取,从上次中断的地⽅继续爬取,以及抽取⽹页中我们需要的数据.
WebMagic官⽅资源

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。