【JAVA】Java爬虫框架 WebMagic的使用

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

PageProcessor的实现:

  实现PageProcessor接口即可。

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

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

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

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

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

public class GithubRepoPageProcessor implements PageProcessor {

    // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

    @Override
    // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑
    public void process(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());
    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {

        Spider.create(new GithubRepoPageProcessor())
                //从"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 void main(String[] args) {
    Spider.create(new GithubRepoPageProcessor())
            //从"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来进行去重,占用内存较小,但是可能漏抓页面
     
时间: 2024-10-10 00:09:11

【JAVA】Java爬虫框架 WebMagic的使用的相关文章

java 网络爬虫框架

java 网络爬虫框架: apache Nutch ,Heritrix等,主要参照开源社区提供的40个开源项目 文章背景: 最近要写个爬虫抓去新浪微博的数据,然后用hadoop存储后,进行分析,就在网上搜取相关资料. 网友推荐使用python来做,但鉴于本人擅长的是java,学习python需要一定的时间成本,还是选择java.一开始想自己从头写,搜到apache httpClient,  后来想着还是用开源成熟的框架来做,目前觉得apache Nutch 和Heritrix是个不错的选择,不过

爬虫框架webmagic与spring boot的结合使用--转

原文地址:http://www.jianshu.com/p/c3fc3129407d 1. 爬虫框架webmagic WebMagic是一个简单灵活的爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 1.1 官网地址 官网文档写的比较清楚,建议大家直接阅读官方文档,也可以阅读下面的内容.地址如下: 官网:http://webmagic.io 中文文档地址: http://webmagic.io/docs/zh/ English: http://webmagic.io/do

JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)

WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来实现多线程,创建链接池,自动解析网页代码获取请求链接,封装正则表达式等等. 但是如果使用框架,就不再需要考虑爬虫的逻辑,只需要专注HTML内容的解析和获取. 引用WebMagic后写一个爬虫只需要编写一个类实现PageProcessor接口,实现两个方法. 一个WebMagic例子 package

爬虫框架--webmagic

官方有详细的使用文档:http://webmagic.io/docs/zh/ 简介:这只是个java爬虫框架,具体使用需要个人去定制,没有图片验证,不能获取js渲染的网页,但简单易用,可以通过xpath和css选择符获取网页内容,官方也有超详细的文档,适合爬取简单的网页和新手学习爬虫.图片验证和js渲染网页获取都可以后来添加进去.使用webmagic这个框架,可以减少很多需要自己写的代码,从而专注于网页分析获取和储存的地方. 使用:

java爬虫框架webmagic

最近需要爬去网站的一些商品,就开始在网上找方法,本来是想着用Python做的,因为以前用Python写过一个小脚本,爬取一个文献网站上的免费文献. 步骤大概是这样的:1,先获取给定URL的html文件,然后在这个文件中用正则表达式匹配出需要的URL(可能含有分页的URL),然后再获取匹配出的URL的html,在这些html文件中会有可以下载的PDF文件的链接,然后把这些链接存到磁盘中.(这中间因为网站有防爬虫,所以中间花了点时间在模拟浏览器上).拿到链接之后,就是下载文献了,写了一个shell脚

开源JAVA单机爬虫框架简介,优缺点分析

互联网营销时代,获取海量数据成为营销推广的关键.而获得数据的最佳方式就是利用爬虫去抓取.但是爬虫的使用少不了代理ip太阳HTTP的支撑.当然网络上现在有很多开源爬虫,大大方便了大家使用.但是开源网络爬虫也是有优点也有缺点,清晰认知这一点才能达成自己的目标.对于爬虫的功能来说.用户比较关心的问题往往是:1)爬虫可以爬取ajax信息么?网页上有一些异步加载的数据,爬取这些数据有两种方法:使用模拟浏览器(问题1中描述过了),或者分析ajax的http请求,自己生成ajax请求的url,获取返回的数据.

学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic .我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设

一个方便易用的爬虫框架

本文转载至  http://www.tuicool.com/articles/VZBj2e 原文  http://itindex.net/detail/52388-框架 webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. 官方网站  http://webmagic.io/ webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发.webmagic的核心非常简单,但是覆盖爬虫的整个流程,也

Java爬虫框架调研

Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程序,功能丰富,文档完整.有数据抓取解析以及存储的模块 heritrix 比较成熟 地址:internetarchive/heritrix3 · GitHub很早就有了,经历过很多次更新,使用的人比较多,功能齐全,文档完整,网上的资料也多.有自己的web管理控制台,包含了一个HTTP 服务器.操作者可