Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
webmagic
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
沈俊林
webmagic
Commits
4c4fbe8d
Commit
4c4fbe8d
authored
Aug 09, 2013
by
yihua.huang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update readme
parent
73f7e1d8
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
112 additions
and
43 deletions
+112
-43
README.md
README.md
+112
-43
No files found.
README.md
View file @
4c4fbe8d
webmagic
webmagic
---------
---------
[

](https://travis-ci.org/code4craft/webmagic)
[

](https://travis-ci.org/code4craft/webmagic)
####*一个网络爬虫工具包*
>webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发。webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料。作者曾经在前公司进行过一年的垂直爬虫的开发,webmagic就是为了解决爬虫开发的一些重复劳动而产生的框架。
webmagic的发起源于工作中的需要,其定位是帮助开发者更便捷的开发一个垂直的网络爬虫
。
>web爬虫是一种技术,webmagic致力于将这种技术的实现成本降低,但是出于对资源提供者的尊重,webmagic不会做反封锁的事情,包括:验证码破解、代理切换、自动登录、抓取静态资源等
。
webmagic的
功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化),开发者可以便捷的使用xpath和正则表达式进行链接和内容的提取,只需编写少量代码即可完成一个定制爬虫。
webmagic的
主要特色:
###特色###
*
核心简单但是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好材料。
*
提供丰富的抽取页面API。
*
无配置,但是可通过POJO+注解形式实现一个爬虫。
*
支持多线程。
*
支持分布式。
*
支持爬取js动态渲染的页面。
*
无框架依赖,可以灵活的嵌入到项目中去。
*
####垂直爬虫####
webmagic的架构和设计参考了以下两个项目,感谢以下两个项目的作者:
webmagic着重于页面抽取的工作。开发者可以使用xpath和正则表达式进行链接和内容的提取,支持链式API调用,以及单复数转换。
String content = page.getHtml().xpath("//div[@class='body']").regex("这段话比较重要(.*)").toString();
python爬虫
**scrapy**
[
https://github.com/scrapy/scrapy
](
https://github.com/scrapy/scrapy
)
*
####嵌入式&无配置####
Java爬虫
**Spiderman**
[
https://gitcafe.com/laiweiwei/Spiderman
](
https://gitcafe.com/laiweiwei/Spiderman
)
webmagic与其他Full-Stack的框架不同,没有配置文件,大部分功能都通过简单的API调用完成。webmagic以jar包的形式存在,并且不依赖任何框架,在程序可以随处进行调用。
以下是爬取oschina博客的一段代码:
## 快速开始
Spider.create(new SimplePageProcessor("http://my.oschina.net/", "http://my.oschina.net/*/blog/*")).run();
### 使用maven
*
####可扩展####
webmagic使用maven管理依赖,你可以直接下载webmagic源码进行编译:
参考
[
`scrapy`
](
https://github.com/scrapy/scrapy
)
的设计,webmagic将爬虫的扩展点分为Processor、Schedular、Downloader、Pipeline三个模块,可以通过扩展这些接口实现强大的扩展功能。如可以通过多个Spider实现多线程抓取;可以通过扩展Schedular实现断点续传乃至于分布式爬虫;可以通过扩展Pipeline实现业务可定制的持久化功能。webmagic的架构原理见作者的一篇文章:
[
webmagic的设计机制及原理-如何开发一个Java爬虫
](
http://my.oschina.net/flashsword/blog/145796
)

git clone https://github.com/code4craft/webmagic.git
cd webmagic
mvn clean install
------
安装后,在项目中添加对应的依赖即可使用webmagic:
###Get Started
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.2.0</version>
</dependency>
webmagic定制的核心是PageProcessor接口。
#### 项目结构
项目使用maven托管,如果没用maven的可以去
[
http://git.oschina.net/flashsword20/webmagic-bin
](
http://git.oschina.net/flashsword20/webmagic-bin
)
库下载依赖包(这个仓库代码没有实时同步更新,不过依赖应该不会有变化)。
webmagic主要包括两个包:
例如,我们要实现一个简单的通用爬虫SimplePageProcessor,代码如下:
*
**webmagic-core**
public class SimplePageProcessor implements PageProcessor {
webmagic核心部分,只包含爬虫基本模块和基本抽取器。webmagic-core的目标是成为网页爬虫的一个教科书般的实现。
private String urlPattern;
*
**webmagic-extension**
private static final String UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31";
webmagic的扩展模块,提供一些更方便的编写爬虫的工具。包括注解格式定义爬虫、JSON、分布式等支持。
private Site site;
webmagic还包含两个可用的扩展包,因为这两个包都依赖了比较重量级的工具,所以从主要包中抽离出来:
public SimplePageProcessor(String startUrl, String urlPattern) {
*
**webmagic-saxon**
this.site = Site.me().setStartUrl(startUrl).
setDomain(UrlUtils.getDomain(startUrl)).setUserAgent(UA);
this.urlPattern = "("+urlPattern.replace(".","\\.").replace("*","[^\"'#]*")+")";
}
webmagic与Saxon结合的模块。Saxon是一个XPath、XSLT的解析工具,webmagic依赖Saxon来进行XPath2.0语法解析支持。
*
**webmagic-selenium**
webmagic与Selenium结合的模块。Selenium是一个模拟浏览器进行页面渲染的工具,webmagic依赖Selenium进行动态页面的抓取。
在项目中,你可以根据需要依赖不同的包。
### 不使用maven
不使用maven的用户,可以下载这个二进制打包版本(感谢
[
oschina
](
http://www.oschina.net/
)
):
git clone http://git.oschina.net/flashsword20/webmagic-bin.git
在
**bin/lib**
目录下,有项目依赖的所有jar包,直接在IDE里import即可。
### 第一个爬虫
#### 定制PageProcessor
PageProcessor是webmagic-core的一部分,定制一个PageProcessor即可实现自己的爬虫逻辑。以下是抓取osc博客的一段代码:
public class OschinaBlogPageProcesser implements PageProcessor {
private Site site = Site.me().setDomain("my.oschina.net")
.addStartUrl("http://my.oschina.net/flashsword/blog");
@Override
@Override
public void process(Page page) {
public void process(Page page) {
List<String> requests = page.getHtml().links().regex(urlPattern).toStrings();
List<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all();
//调用page.addTargetRequests()方法添加待抓取链接
page.addTargetRequests(links);
page.addTargetRequests(requests);
page.putField("title", page.getHtml().xpath("//div[@class='BlogEntity']/div[@class='BlogTitle']/h1").toString());
//xpath方式抽取
page.putField("content", page.getHtml().$("div.content").toString());
page.putField("title", page.getHtml().xpath("//title"));
page.putField("tags",page.getHtml().xpath("//div[@class='BlogTags']/a/text()").all());
//sc表示使用Readability技术抽取正文
page.putField("content", page.getHtml().smartContent());
}
}
@Override
@Override
public Site getSite() {
public Site getSite() {
//定义抽取站点的相关参数
return site;
return site;
}
public static void main(String[] args) {
Spider.create(new OschinaBlogPageProcesser())
.pipeline(new ConsolePipeline()).run();
}
}
这里通过page.addTargetRequests()方法来增加要抓取的URL,并通过page.putField()来保存抽取结果。page.getHtml().xpath()则是按照某个规则对结果进行抽取,这里抽取支持链式调用。调用结束后,toString()表示转化为单个String,all()则转化为一个String列表。
Spider是爬虫的入口类。Pipeline是结果输出和持久化的接口,这里ConsolePipeline表示结果输出到控制台。
执行这个main方法,即可在控制台看到抓取结果。webmagic默认有3秒抓取间隔,请耐心等待。
#### 使用注解
webmagic-extension包括了注解方式编写爬虫的方法,只需基于一个POJO增加注解即可完成一个爬虫。以下仍然是抓取oschina博客的一段代码,功能与OschinaBlogPageProcesser完全相同:
@TargetUrl("http://my.oschina.net/flashsword/blog/\\d+")
public class OschinaBlog {
@ExtractBy("//title")
private String title;
@ExtractBy(value = "div.BlogContent",type = ExtractBy.Type.Css)
private String content;
@ExtractBy(value = "//div[@class='BlogTags']/a/text()", multi = true)
private List<String> tags;
public static void main(String[] args) {
OOSpider.create(
Site.me().addStartUrl("http://my.oschina.net/flashsword/blog"),
new ConsolePageModelPipeline(), OschinaBlog.class).run();
}
}
}
}
调用这个爬虫的代码如下:
这个例子定义了一个Model类,Model类的字段'title'、'content'、'tags'均为要抽取的属性。这个类在Pipeline里是可以复用的。
### 详细文档
Spider.create(new SimplePageProcessor("http://my.oschina.net/", "http://my.oschina.net/*/blog/*")).run();
见
[
webmagic manual.md
](
https://github.com/code4craft/webmagic/blob/master/webmagic%20manual.md
)
。
### 示例
### 示例
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment