java webmagic 使用_【JAVA】Java爬虫框架 WebMagic的使用【未完】

具体详细信息参见 http://webmagic.io/

PageProcessor的实现:

实现PageProcessor接口即可。

在里面可以定制自己的爬虫规则

Webmagic的页面抓取过程也就是PageProcessor分为三个部分:

1.设置抓取器的参数:如重复次数,重复事件等等

2.设置抓取规则:也就是给你一个Html页面你要抓取其中的哪些信息

3.从当前的页面找没有访问过的连接,加入到抓取队列,等待抓取

public class GithubRepoPageProcessor implementsPageProcessor {//部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

@Override//process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑

public voidprocess(Page page) {//部分二:定义如何抽取页面信息,并保存下来

page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());

page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());if (page.getResultItems().get("name") == null) {//skip this page

page.setSkip(true);

}

page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));//部分三:从页面发现后续的url地址来抓取

page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());

}

@OverridepublicSite getSite() {returnsite;

}public static voidmain(String[] args) {

Spider.create(newGithubRepoPageProcessor())//从"https://github.com/code4craft"开始抓

.addUrl("https://github.com/code4craft")//开启5个线程抓取

.thread(5)//启动爬虫

.run();

}

}

Selectable接口是什么:

实现Selectable接口就可以完成页面元素的链式抽取

page.getHtml()返回的是Html对象,这个Html类实现了Selectable接口,就可以继续抽取

也就是可以直接在page.getHtml().xxx().xxx() 这样链式的抽取元素

获取结果:

如果抽取完毕得到自己想要的东西的话,就可以用get方法或者toString方法来获取结果

get()返回字符串

toString()返回字符串

all()返回所有抽取结果

match()返回boolean值,代表是否有匹配结果

保存结果:

上面的过程已经可以得到想要的结果了,现在就需要对这些结果做处理

选择,是输出出来呢,还是保存到数据库,还是保存到文件中。

就用到了Pipeline这个组件

这个组件就是负责指定结果的去向

比如从控制台输出结果,就是用ConsolePipeline来保存的

如果想要把他存放在某个目录,按照以下的代码做就行,非常方便

public static voidmain(String[] args) {

Spider.create(newGithubRepoPageProcessor())//从"https://github.com/code4craft"开始抓

.addUrl("https://github.com/code4craft")

.addPipeline(new JsonFilePipeline("D:\\webmagic\\"))//开启5个线程抓取

.thread(5)//启动爬虫

.run();

}

爬虫的配置:

Spider是一个类,这个类是爬虫启动的入口

需要给他的create方法传入一个策略 也就是PageProcessor的实现

然后配置

然后.run()运行

网站的配置:

对于站点本身有一些配置信息

比如有的站点需要登录,就要设定cookie

所以用Site对象类配置一个站点所需的各种属性。

爬虫的监控:

查看爬虫的执行状况

看有多少页面,已经得到了多少页面

通过JMX实现

可以使用Jconsole等工具来查看

可以很方便的添加一个监控

SpiderMonitor.instance().register(oschinaSpider);

SpiderMonitor.instance().register(githubSpider);

WebMagic的组件:

四个,PageProcessor,Schedule,Downloader,Pipline

分别都可以定制

定制Pipline:

实现Pipline接口即可

已经提供了几个默认的Pipline

ConsolePipeline

输出结果到控制台

抽取结果需要实现toString方法

FilePipeline

保存结果到文件

抽取结果需要实现toString方法

JsonFilePipeline

JSON格式保存结果到文件

ConsolePageModelPipeline

(注解模式)输出结果到控制台

FilePageModelPipeline

(注解模式)保存结果到文件

JsonFilePageModelPipeline

(注解模式)JSON格式保存结果到文件

想要持久化的字段需要有getter方法

定制Scheduler

Scheduler是对于URL进行管理的组件

可以对URL队列去重

现有的Scheduler

DuplicateRemovedScheduler

抽象基类,提供一些模板方法

继承它可以实现自己的功能

QueueScheduler

使用内存队列保存待抓取URL

PriorityScheduler

使用带有优先级的内存队列保存待抓取URL

耗费内存较QueueScheduler更大,但是当设置了request.priority之后,只能使用PriorityScheduler才可使优先级生效

FileCacheQueueScheduler

使用文件保存抓取URL,可以在关闭程序并下次启动时,从之前抓取到的URL继续抓取

需指定路径,会建立.urls.txt和.cursor.txt两个文件

RedisScheduler

使用Redis保存抓取队列,可进行多台机器同时合作抓取

需要安装并启动redis

可以单独定义去重的策略

HashSetDuplicateRemover

使用HashSet来进行去重,占用内存较大

BloomFilterDuplicateRemover

使用BloomFilter来进行去重,占用内存较小,但是可能漏抓页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值