webMagic
是一个非常不错的开发框架。简单易学,只要会java就可以很轻松上手;
首先我先分享一下我学习时所使用资料:
1、http://webmagic.io/(非常好的文档,里面的代码都可以跑,而且还在更新,建议收藏)
2、http://juvenshun.iteye.com/blog/269094(介绍maven建议先装好)
3、http://my.oschina.net/huangyong/blog/200075(介绍git的)
关于编译器:
推荐大家用idea;非常好用(idea+maven+git会极大地减少你的开发时间)
我将网上的文档整理了一下。大家可以看看,希望对大家有用哦
WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)
1.Downloader
Downloader负责从互联网上下载页面.
2.PageProcessor
PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。
3.Scheduler
Scheduler负责管理待抓取的URL,以及一些去重的工作。
4.Pipeline
Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库。
1.2.2 用于数据流转的对象
1. Request
Request是对URL地址的一层封装,一个Request对应一个URL地址。
2. Page
Page代表了从Downloader下载到的一个页面——可能是HTML。
3. ReusltItems
ReusltItems相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。
1.2.3 控制爬虫运转的引擎--Spider
Downloader、PageProcessor、Scheduler、Pipeline都是Spider的一个属性
Spider是WebMagic内部流程的核心。
包括:它封装了爬虫的创建、启动、停止、多线程等功能。
1.2.4 快速上手
一般来说,对于编写一个爬虫,PageProcessor是需要编写的部分,而Spider则是创建和控制爬虫的入口。
项目组成
1.3.1 主要部分
webmagic-core
webmagic-core是WebMagic核心部分,只包含爬虫基本模块和基本抽取器。
webmagic-extension
webmagic-extension是WebMagic的主要扩展模块,提供一些更方便的编写爬虫的工具。
快速开始
2.1 使用Maven
WebMagic基于Maven进行构建,推荐使用Maven来安装WebMagic。
3.1 下载源码
WebMagic目前有两个仓库:
· https://github.com/code4craft/webmagic
github上的仓库保存最新版本
· http://git.oschina.net/flashsword20/webmagic
此仓库包含所有编译好的依赖包,只保存项目的稳定版本;
无论在哪个仓库,使用
git clone https://github.com/code4craft/webmagic.git
或
git clone http://git.oschina.net/flashsword20/webmagic.git
即可下载最新代码。
TargetUrl中的自定义正则表达式
这里我们使用的是正则表达式来规定URL范围。可能细心的朋友,会知道.是正则表达式的保留字符,那么这里是不是写错了呢?其实是这里为了方便,WebMagic自己定制的适合URL的正则表达式,主要由两点改动:
· 将URL中常用的字符.默认做了转义,变成了\.
· 将"*"替换成了".*",直接使用可表示通配符。
例如,https://github.com/*在这里是一个合法的表达式,它表示https://github.com/下的所有URL。
在WebMagic中,从TargetUrl页面得到的URL,只要符合TargetUrl的格式,也是会被下载的。所以即使不指定HelpUrl也是可以的——例如某些博客页总会有“下一篇”链接,这种情况下无需指定HelpUrl。
Pileline
Pileline是抽取结束后,进行处理的部分,它主要用于抽取结果的保存,也可以定制Pileline可以实现一些通用的功能。
代码实例
新建工程:
GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
一般GroupID就是填com.leafive.test这样子。
项目生成后,目录结构为:
Java_s为自己创建的;新建项目时,resources目录需要自己建(竟然没有自动生成)
我们在java下新建一个package(java_s),接着新建一个类;把代码写上;
package java_s;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.model.ConsolePageModelPipeline;
import us.codecraft.webmagic.model.OOSpider;
import us.codecraft.webmagic.model.annotation.ExtractBy;
import us.codecraft.webmagic.model.annotation.ExtractByUrl;
import us.codecraft.webmagic.model.annotation.HelpUrl;
import us.codecraft.webmagic.model.annotation.TargetUrl;
@TargetUrl("https://github.com/\\w+/\\w+")
@HelpUrl("https://github.com/\\w+")
public class GithubRepo {
@ExtractBy(value = "//h1[@class='entry-title public']/strong/a/text()", notNull = true)
private String name;
@ExtractByUrl("https://github\\.com/(\\w+)/.*")
private String author;
@ExtractBy("//div[@id='readme']/tidyText()")
private String readme;
public static void main(String[] args) {
OOSpider.create(Site.me().setSleepTime(1000)
, new ConsolePageModelPipeline(), GithubRepo.class)
.addUrl("https://github.com/code4craft").thread(5).run();
}
}
当然,还有pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spider_Demo</groupId>
<artifactId>spider_Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.5.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
这里我们使用了webmagic包:
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.5.1</version>
如果需要引用其他的包,需要在网上搜索他的groupid、artfactid和version。
最后单击工程右键——maven——reimport等它import结束就可以了
单机class右键选择run即可;
问题:
解决方法:选中报错字段,出现蓝色提示框后安Alt+Enter,编译器自动import
<!--EndFragment-->