爬虫之WebCollector一

爬虫:利用工具模拟浏览器,访问网页,获取目标网页数据。(自己理解)

传统爬虫:利用类似HttpClient、hutool这些http请求工具对网页进行请求,对response响应数据,再利用jsoup等html解析工具进行解析,如果单个线程不能满足需求,可以利用类似Executor这种调度工具,来并发执行。

WebCollector,最新是2.73,这个框架的优点简单有几个:

  1.  快速开发,可以完全依赖框架本身的内核处理器 ,对网页进行请求爬取、解析。
  2.  自动搜索响应的请求信息,将响应信息中的url进行自动爬取。(addRegex方法过滤爬取内容,自动对绝对路径进行填充。)
  3.  对爬取的内容进行自动查重。
  4.  允许断点爬取。
package cn.edu.hfut.dmic.webcollector.example;

import cn.edu.hfut.dmic.webcollector.model.CrawlDatum;
import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.rocks.BreadthCrawler;

/**
 * 本教程和深度遍历没有任何关系
 * 一些爬取需求希望加入深度信息,即遍历树中网页的层
 * 利用2.20版本中的新特性MetaData可以轻松实现这个功能
 *
 * @author hu
 */
public class DemoAnnotatedDepthCrawler extends BreadthCrawler {

    public DemoAnnotatedDepthCrawler(String crawlPath, boolean autoParse) {
        super(crawlPath, autoParse);

        for (int i = 1; i <= 5; i++) {
            addSeed(new CrawlDatum("http://news.hfut.edu.cn/list-1-" + i + ".html")
                    .meta("depth", 1));
        }

        /*正则规则用于控制爬虫自动解析出的链接,用户手动添加的链接,例如添加的种子、或
          在visit方法中添加到next中的链接并不会参与正则过滤*/
        /*自动爬取类似"http://news.hfut.edu.cn/show-xxxxxxhtml"的链接*/
        addRegex("http://news.hfut.edu.cn/show-.*html");
        /*不要爬取jpg|png|gif*/
        addRegex("-.*\\.(jpg|png|gif).*");
        /*不要爬取包含"#"的链接*/
        addRegex("-.*#.*");

    }

    @Override
    public void visit(Page page, CrawlDatums next) {
        System.out.println("visiting:" + page.url() + "\tdepth=" + page.meta("depth"));
    }

    @AfterParse
    public void afterParse(Page page, CrawlDatums next) {
        //当前页面的depth为x,则从当前页面解析的后续任务的depth为x+1
        int depth = 1;
        //如果在添加种子时忘记添加depth信息,可以通过这种方式保证程序不出错
        try {
            depth = page.metaAsInt("depth");
        } catch (Exception ex) {

        }
        depth++;
        next.meta("depth", depth);
    }


    public static void main(String[] args) throws Exception {
        DemoAnnotatedDepthCrawler crawler = new DemoAnnotatedDepthCrawler("crawl", true);
        crawler.getConf().setTopN(5);
        crawler.start(3);
    }

}

这是源码中,作者做的demo。这里主要有两点对于初学者,有点蒙。

  1.  addRegex("http://news.hfut.edu.cn/show-.*html"); /*正则规则用于控制爬虫自动解析出的链接,用户手动添加的链接,例如添加的种子、或在visit方法中添加到next中的链接并不会参与正则过滤*/   
  2.  visit方法的时候,什么时候执行?(第一层,添加的种子,第二层,开始对响应的数据进行匹配抓取。可以利用page.url()理解。)

高级操作,比如metadate,301,302,cookie,自定义封装请求。可以看源码和官方教程。

教程:https://www.oschina.net/p/webcollector
源码:https://github.com/CrawlScript/WebCollector.git

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebCollector是一个无须配置、便于二次开发的Java爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫WebCollector-Hadoop是WebCollector的Hadoop版本,支持分布式爬取。 WebCollector致力于维护一个稳定、可扩的爬虫内核,便于开发者进行灵活的二次开发。内核具有很强的扩展性,用户可以在内核基础上开发自己想要的爬虫。源码中集成了Jsoup,可进行精准的网页解析。2.x版本中集成了selenium,可以处理JavaScript生成的数据。 WebCollector特性: 1、自定义遍历策略,可完成更为复杂的遍历业务,例如分页、AJAX 2、可以为每个 URL 设置附加信息(MetaData),利用附加信息可以完成很多复杂业务,例如深度获取、锚文本获取、引用页面获取、POST 参数传递、增量更新等。 3、使用插件机制,用户可定制自己的Http请求、过滤器、执行器等插件。 4、内置一套基于内存的插件(RamCrawler),不依赖文件系统或数据库,适合一次性爬取,例如实时爬取搜索引擎。 5、内置一套基于 Berkeley DB(BreadthCrawler)的插件:适合处理长期和大量级的任务,并具有断点爬取功能,不会因为宕机、关闭导致数据丢失。 6、集成 selenium,可以对 JavaScript 生成信息进行抽取 7、可轻松自定义 http 请求,并内置多代理随机切换功能。 可通过定义 http 请求实现模拟登录。 8、使用 slf4j 作为日志门面,可对接多种日志 9、使用类似Hadoop的Configuration机制,可为每个爬虫定制配置信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值