论坛首页 Java企业应用论坛

分享一个自己写的爬虫框架

浏览 11057 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-07-26   最后修改:2013-07-26
之前写过一年的垂直爬虫(抓博客什么的),对于各种重复代码很厌倦,后来参考了据说是最优秀的爬虫框架scrapy,写了一个Java版的框架webmagic。
自己用着还是挺顺手的,底层封装了HttpClient、Jsoup、HtmlCleaner,支持多线程,也包括url去重、重试、编码判断什么的。希望能帮到把各位自己手写爬虫代码的同学。
代码不长,自认为模块化的也挺清晰,如果对爬虫感兴趣的可以看一看。
以下是使用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
   发表时间:2013-07-29  
LZ你好! 公司有个抓取视频信息的项目(播放地址,和描述信息),我自己也针对某酷写了一个爬虫,基于多线程,JSOUP的。
有个问题想请问一下LZ,在爬虫这块,有没有好的对URL进行分类的思路。
0 请登录后投票
   发表时间:2013-07-30  
不知道你说的URL分类是指什么,是跟据页面内容对URL进行分类?
fisher123 写道
LZ你好! 公司有个抓取视频信息的项目(播放地址,和描述信息),我自己也针对某酷写了一个爬虫,基于多线程,JSOUP的。
有个问题想请问一下LZ,在爬虫这块,有没有好的对URL进行分类的思路。

0 请登录后投票
   发表时间:2013-07-31  
一直想学习爬虫,但是又不知道从何做起,LZ可否指点迷津,感激不尽
0 请登录后投票
   发表时间:2013-07-31  
如果你使用Java并且有一点基础的话,可以读一下我的webmagic的设计文档,里面把我所知道的理论都讲了一遍了。
http://my.oschina.net/flashsword/blog/145796
至尊宝_唯一 写道
一直想学习爬虫,但是又不知道从何做起,LZ可否指点迷津,感激不尽
0 请登录后投票
   发表时间:2013-08-01  
打算学习一下
0 请登录后投票
   发表时间:2013-08-01  
flashsword20 写道
如果你使用Java并且有一点基础的话,可以读一下我的webmagic的设计文档,里面把我所知道的理论都讲了一遍了。
http://my.oschina.net/flashsword/blog/145796
至尊宝_唯一 写道
一直想学习爬虫,但是又不知道从何做起,LZ可否指点迷津,感激不尽


打算学习下
0 请登录后投票
   发表时间:2013-08-02  
爬虫框架是不是首先要分析下 整个HTML,根据HTML的标签等信息整理好 爬虫爬取的策略?
同时还要几个问题:
1. 实体类怎么设计?爬不同页面,不同资料,设计不同的实体类
2. 爬虫有定时功能吗? 对新出现的资料进行爬取
0 请登录后投票
   发表时间:2013-08-02  
谢谢![quote="flashsword20"]如果你使用Java并且有一点基础的话,可以读一下我的webmagic的设计文档,里面把我所知道的理论都讲了一遍了。 http://my.oschina.net/flashsword/blog/145796 [quote="至尊宝_唯一"]一直想学习爬虫,但是又不知道从何做起,LZ可否指点迷津,感激不尽
0 请登录后投票
   发表时间:2013-08-02  
实体类的想法很好,我正好最近也想到了这个东西,正在做一个基于模型的实现。
目前实现大概是这样子:
@TargetUrl("http://my.oschina.net/flashsword/blog/*")
public class OschinaBlog {

    @ExtractBy("//title")
    private String title;

    @ExtractBy(value = "div.BlogContent",type = ExtractBy.Type.Css)
    private String content;

}

增量抓取目前还没实现,因为需要外接存储。简单的实现,设计上给URL加上一个时间戳即可,不会太复杂。
endual 写道
爬虫框架是不是首先要分析下 整个HTML,根据HTML的标签等信息整理好 爬虫爬取的策略?
同时还要几个问题:
1. 实体类怎么设计?爬不同页面,不同资料,设计不同的实体类
2. 爬虫有定时功能吗? 对新出现的资料进行爬取
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics