【WebMagic】Java 爬虫框架初实践

前言

在项目中碰到需要进行爬虫收集数据的需求。因此找了一下Java爬虫框架,对比了之后发现 WebMagic 相对而言比较简单易用。


一、关于 WebMagic 

webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发。webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料。

webmagic的主要特色:

  • 完全模块化的设计,强大的可扩展性。
  • 核心简单但是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好材料。
  • 提供丰富的抽取页面API。
  • 无配置,但是可通过POJO+注解形式实现一个爬虫。
  • 支持多线程。
  • 支持分布式。
  • 支持爬取js动态渲染的页面。
  • 无框架依赖,可以灵活的嵌入到项目中去。

WebMagic也有相关中文文档,还有详细的开发步骤,本篇也是在此基础上进行实践练习(第一个爬虫项目编写基本的爬虫)。

二、需求说明

  • 爬虫内容 该网页所有文章内容页面

 

三、操作步骤

1.引入 Maven 依赖

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

2.编写处理器

核心:实现 PageProcessor,重写 process 方法

    @Override
    public void process(Page page) {
        // news_box是新闻页面的标签
        // .links().all() 表示获取所有链接 
        // addTargetRequests() 加入爬虫页
        page.addTargetRequests(page.getHtml().xpath("[@class='news_box']").links().all());
        // 此处是保存文章的本地路径
        String path = "";
        // 将页面获取 byte[] 转为文件输出
        FileUtils.getFile(path, page.getBytes());
    }

    public static void main(String[] args) {
        long startTime, endTime;
        System.out.println("【爬虫开始】...");
        startTime = System.currentTimeMillis();

        Spider.create(new GithubRepoPageProcessor())
                // 爬虫开始页面 
                .addUrl("http://www.gov.cn/zhengce/zuixin.htm")
                .thread(5)
                .run();

        endTime = System.currentTimeMillis();
        System.out.println("【爬虫结束】共抓取" + size + "篇文章,耗时约" + ((endTime - startTime) / 1000) + "秒,请查收!");
    }

 

 

Guess you like

Origin blog.csdn.net/Michelle_Zhong/article/details/116104281