利用WebMagic开始你的爬虫之旅

利用WebMagic开始你的爬虫之旅

Scroll Down

(一)前言

在生活和学习中,我们经常遇到这样的一些任务:获取某个网站上的所有图片的下载地址、每日定时获取热搜并发送到指定邮箱等。这些简单且单一的行为,我们可以用爬虫来实现。

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

常见的爬虫框架有:

  • python
    scrapy、Crawley、Portia等
  • Java
    Crawler4j、WebMagic、WebCollector等

(二)WebMagic

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。

WebMagic框架包含四个组件,PageProcessor、Scheduler、Downloader和Pipeline。

这四大组件对应爬虫生命周期中的处理、管理、下载和持久化等功能。

这四个组件都是Spider中的属性,爬虫框架通过Spider启动和管理。

WebMagic总体架构图如下:

1177828201711290006056122073505611.png

(三)使用WebMagic开始一个简单的爬虫

WebMagic主要包含两个jar包:webmagic-core-.jar和webmagic-extension-.jar。在项目中添加这两个包的依赖,即可使用WebMagic。

WebMagic默认使用Maven管理依赖,但是你也可以不依赖Maven进行使用。在你自己的项目中添加以下坐标即可:

<dependency>
<groupId>us.codecraft</groupId>
    <artifactId>webmagic-core</artifactId>
    <version>0.7.3</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.3</version>
</dependency>

由于WebMagic内置了log4j,因此,还需要编写log4j的配置文件log4j.properties,并放到你的项目的resource目录下。log4j配置文件如下:

# log4j.properties
# 全局日志级别设定 ,file
log4j.rootLogger=INFO, stdout, file

# 自定义包路径LOG级别
log4j.logger.org.quartz=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH:mm:ss}[%p]%m%n

# Output to the File
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:\\MyEclipse2017Workspaces\\webmagic\\webmagic.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n%-d{MM-dd HH:mm:ss}-%C.%M()%n[%p]%m%n

至此,我们的WebMagic就配置好了,只需要在你的项目中引入即可。我们这里拿一个抓取我的博客的所有文章的标题的例子:

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;

import java.util.List;

public class MySpiderDemo implements PageProcessor {

    // 抓取网站的相关配置,可以包括编码、抓取间隔1s、重试次数等
    private Site site = Site.me().setRetryTimes(3).setSleepTime(100);

    public Site getSite() {
        return site;
    }

    // 编写爬虫流程
    public void process(Page page) {
        Html html = page.getHtml();
        //System.out.println(html);
        List<String> test = html.xpath("//ul[@class=listing]/div/div/a/@title").all();
        for (String s : test) {
            System.out.println(s);
        }

    }

    //启动爬虫
    public static void main(String[] args) {
        Spider.create(new MySpiderDemo()).addUrl("http://blog.sysake.top/archives").thread(5).run();
    }

}

执行main方法,你会发现爬虫现在已经可以正常工作了!
爬虫.png

更多用法,请参考WebMagic的官方文档