初学爬虫,WebMagic作为一个Java开发的爬虫框架很容易上手,下面就通过一个简单的小例子来看一下。

WebMagic框架简介

WebMagic框架包含四个组件,PageProcessorSchedulerDownloaderPipeline。

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

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

WebMagic总体架构图如下:

四大组件

PageProcessor 负责解析页面,抽取有用信息,以及发现新的链接。需要自己定义。

Scheduler 负责管理待抓取的URL,以及一些去重的工作。一般无需自己定制Scheduler。

Pipeline 负责抽取结果的处理,包括计算、持久化到文件、数据库等。

Downloader 负责从互联网上下载页面,以便后续处理。一般无需自己实现。

用于数据流转的对象

Request 是对URL地址的一层封装,一个Request对应一个URL地址。

Page 代表了从Downloader下载到的一个页面——可能是HTML,也可能是JSON或者其他文本格式的内容。

ResultItems 相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。

环境配置

使用Maven来添加依赖的jar包。

<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>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

或者直接摸我下载。

添加完jar包就完成了所有准备工作,是不是很简单。

下面来测试一下。

package edu.heu.spider;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor; /**
* @ClassName: MyCnblogsSpider
* @author LJH
* @date 2017年11月26日 下午4:41:40
*/
public class MyCnblogsSpider implements PageProcessor { private Site site = Site.me().setRetryTimes(3).setSleepTime(100); public Site getSite() {
return site;
} public void process(Page page) {
if (!page.getUrl().regex("http://www.cnblogs.com/[a-z 0-9 -]+/p/[0-9]{7}.html").match()) {
page.addTargetRequests(
page.getHtml().xpath("//*[@id=\"mainContent\"]/div/div/div[@class=\"postTitle\"]/a/@href").all());
} else {
page.putField(page.getHtml().xpath("//*[@id=\"cb_post_title_url\"]/text()").toString(),
page.getHtml().xpath("//*[@id=\"cb_post_title_url\"]/@href").toString());
}
}
public static void main(String[] args) {
Spider.create(new MyCnblogsSpider()).addUrl("http://www.cnblogs.com/justcooooode/")
.addPipeline(new ConsolePipeline()).run();
}
}

输出结果:

如果你和我一样之前没有用过log4j,可能会出现下面的警告:

这是因为少了配置文件,在resource目录下新建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

现在试一下,没有警告了吧

最新文章

  1. 使用PhantomJS实现网页截图服务
  2. vue.js 第二课
  3. Autofac的高级使用——Autofac.2.6.3.862
  4. Scala伴生类和伴生对象
  5. svn 清空
  6. phpmyadmin数据导入最大限制的解决方法
  7. 数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)
  8. 《前端之路》之三 数组的属性 &amp;&amp; 操作方法(下)
  9. SSM商城开发学习
  10. HTML页面自动跳转,windows操作
  11. 完整的Django入门指南学习笔记2
  12. [luogu P3628] [APIO2010]特别行动队
  13. MySQL Workbench的安全更新模式
  14. hdu 5015 233矩阵快速幂
  15. samba实现跨平台文件共享
  16. 链表推导式 【list comprehension】
  17. Educational Codeforces Round 10 B. z-sort 构造
  18. Android /system/build.prop 文件
  19. 2012全球SEO行业调查报告
  20. SGU - 507 启发式合并维护平衡树信息

热门文章

  1. 深入浅出 SpringMVC - 1
  2. ThreadPoolExecutor系列&lt;一、ThreadPoolExecutor 机制&gt;
  3. Loadrunner Http接口Get/Post方法性能测试脚本解析
  4. Java常用类(四)之数组工具类Arrays
  5. python 模块的概念介绍
  6. oracle数据库无监听程序
  7. d3根据数据绘制不同的形状
  8. Xilinx ISE 14.1中模拟True Dual Port RAM例子
  9. css基础语法二(常用文本与背景属性)
  10. 网络拓展知识 ACL NAT IPv6