分享一个自己写的爬虫框架
flashsword20
2013-07-26
之前写过一年的垂直爬虫(抓博客什么的),对于各种重复代码很厌倦,后来参考了据说是最优秀的爬虫框架scrapy,写了一个Java版的框架webmagic。
看到这个群讨论nutch和Heritrix的比较多,我是比较不喜欢这种动辄要写一本书的工具,webmagic对于小规模抓取足够了。 webmagic自己用着还是挺顺手的,底层封装了HttpClient、Jsoup、HtmlCleaner,支持多线程,也包括url去重、重试、编码判断、自动抽取什么的。 希望能帮到各位自己手写爬虫代码,但是厌倦了重复工作的同学,以及为了一些简单需求却要去看一本书来学用Heritrix的同学 。 代码不长,自认为模块化的也挺清晰,如果对爬虫原理感兴趣的可以看一看。 以下是使用webmagic抓取某个iteye博客的所有文章,并提取标题和正文的爬虫代码: public class IteyeBlogProcessor implements PageProcessor { private Site site; @Override public void process(Page page) { page.addTargetRequests(page.getHtml().links().regex(".*yanghaoli\\.iteye\\.com/blog/\\d+").all()); page.putField("title",page.getHtml().xpath("//title").toString()); //自动抽取正文,用到了readability page.putField("content",page.getHtml().smartContent().toString()); } @Override public Site getSite() { if (site == null) { site = Site.me().setDomain("yanghaoli.iteye.com").addStartUrl("http://yanghaoli.iteye.com/").setSleepTime(100).setRetryTimes(3); } return site; } public static void main(String[] args) { Spider.create(new IteyeBlogProcessor()).thread(5).pipeline(new FilePipeline("/data/webmagic/")).run(); } } 已收录到oschina:http://www.oschina.net/p/webmagic github:https://github.com/code4craft/webmagic |
|
380071587
2013-08-08
|
|
cangbaotu
2016-05-16
楼主v587,我也来分享一个我开发的云爬虫开发框架:神箭手。
我觉得对于开发者来说,能脚本化编写爬虫是一件挺开心的事情( ̄▽ ̄)"。所以我们团队开发了一个专门让开发者用简单的几行 javascript 就能在云上编写和运行复杂爬虫的系统,叫神箭手云爬虫开发平台: http://www.shenjianshou.cn 。欢迎同行们来试用拍砖,尽情给俺们提意见。有想法的可以加群讨论: 342953471 |
|
Kingson_Wu
2016-06-26
有个疑问,webmagic怎么定制爬虫的深度?
|
|
yuntui
2016-08-01
flashsword20 写道 之前写过一年的垂直爬虫(抓博客什么的),对于各种重复代码很厌倦,后来参考了据说是最优秀的爬虫框架scrapy,写了一个Java版的框架webmagic。
看到这个群讨论nutch和Heritrix的比较多,我是比较不喜欢这种动辄要写一本书的工具,webmagic对于小规模抓取足够了。 webmagic自己用着还是挺顺手的,底层封装了HttpClient、Jsoup、HtmlCleaner,支持多线程,也包括url去重、重试、编码判断、自动抽取什么的。 希望能帮到各位自己手写爬虫代码,但是厌倦了重复工作的同学,以及为了一些简单需求却要去看一本书来学用Heritrix的同学 。 代码不长,自认为模块化的也挺清晰,如果对爬虫原理感兴趣的可以看一看。 以下是使用webmagic抓取某个iteye博客的所有文章,并提取标题和正文的爬虫代码: public class IteyeBlogProcessor implements PageProcessor { private Site site; @Override public void process(Page page) { page.addTargetRequests(page.getHtml().links().regex(".*yanghaoli\\.iteye\\.com/blog/\\d+").all()); page.putField("title",page.getHtml().xpath("//title").toString()); //自动抽取正文,用到了readability page.putField("content",page.getHtml().smartContent().toString()); } @Override public Site getSite() { if (site == null) { site = Site.me().setDomain("yanghaoli.iteye.com").addStartUrl("http://yanghaoli.iteye.com/").setSleepTime(100).setRetryTimes(3); } return site; } public static void main(String[] args) { Spider.create(new IteyeBlogProcessor()).thread(5).pipeline(new FilePipeline("/data/webmagic/")).run(); } } 已收录到oschina:http://www.oschina.net/p/webmagic github:https://github.com/code4craft/webmagic |