You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
webmagic/README.md

99 lines
4.1 KiB
Markdown

12 years ago
webmagic
---------
12 years ago
[![Build Status](https://travis-ci.org/code4craft/webmagic.png?branch=master)](https://travis-ci.org/code4craft/webmagic)
12 years ago
####*一个网络爬虫工具包*
12 years ago
webmagic的发起源于工作中的需要其定位是帮助开发者更便捷的开发一个垂直的网络爬虫。
12 years ago
12 years ago
webmagic的功能覆盖整个爬虫的生命周期(链接提取、页面下载、内容抽取、持久化)开发者可以便捷的使用xpath和正则表达式进行链接和内容的提取只需编写少量代码即可完成一个定制爬虫。
12 years ago
12 years ago
###特色###
12 years ago
12 years ago
* ####垂直爬虫####
webmagic着重于页面抽取的工作。开发者可以使用xpath和正则表达式进行链接和内容的提取支持链式API调用以及单复数转换。
String content = page.getHtml().xpath("//div[@class='body']").regex("这段话比较重要(.*)").toString();
12 years ago
12 years ago
* ####嵌入式&无配置####
webmagic与其他Full-Stack的框架不同没有配置文件大部分功能都通过简单的API调用完成。webmagic以jar包的形式存在并且不依赖任何框架在程序可以随处进行调用。
12 years ago
以下是爬取oschina博客的一段代码
12 years ago
Spider.create(new SimplePageProcessor("http://my.oschina.net/", "http://my.oschina.net/*/blog/*")).run();
12 years ago
* ####可扩展####
参考[`scrapy`](https://github.com/scrapy/scrapy)的设计webmagic将爬虫的扩展点分为Processor、Schedular、Downloader、Pipeline三个模块可以通过扩展这些接口实现强大的扩展功能。如可以通过多个Spider实现多线程抓取可以通过扩展Schedular实现断点续传乃至于分布式爬虫可以通过扩展Pipeline实现业务可定制的持久化功能。
12 years ago
12 years ago
12 years ago
------
###Get Started
12 years ago
webmagic定制的核心是PageProcessor接口。
12 years ago
12 years ago
例如我们要实现一个简单的通用爬虫SimplePageProcessor代码如下
12 years ago
public class SimplePageProcessor implements PageProcessor {
private String urlPattern;
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";
private Site site;
public SimplePageProcessor(String startUrl, String urlPattern) {
this.site = Site.me().setStartUrl(startUrl).
setDomain(UrlUtils.getDomain(startUrl)).setUserAgent(UA);
this.urlPattern = "("+urlPattern.replace(".","\\.").replace("*","[^\"'#]*")+")";
}
@Override
public void process(Page page) {
List<String> requests = page.getHtml().links().regex(urlPattern).toStrings();
12 years ago
//调用page.addTargetRequests()方法添加待抓取链接
12 years ago
page.addTargetRequests(requests);
12 years ago
//xpath方式抽取
page.putField("title", page.getHtml().xpath("//title"));
12 years ago
//sc表示使用Readability技术抽取正文
page.putField("content", page.getHtml().smartContent());
12 years ago
}
@Override
public Site getSite() {
12 years ago
//定义抽取站点的相关参数
12 years ago
return site;
}
}
12 years ago
调用这个爬虫的代码如下:
12 years ago
Spider.create(new SimplePageProcessor("http://my.oschina.net/", "http://my.oschina.net/*/blog/*")).run();
12 years ago
12 years ago
### 技术架构及原理
见作者的一篇文章:[webmagic的设计机制及原理-如何开发一个Java爬虫](http://my.oschina.net/flashsword/blog/145796)
12 years ago
12 years ago
### 示例
12 years ago
12 years ago
webmagic-samples目录里有一些定制PageProcessor以抽取不同站点的例子。
作者还有一个使用webmagic进行抽取并持久化到数据库的项目[JobHunter](http://git.oschina.net/flashsword20/jobhunter)。这个项目整合了Spring自定义了Pipeline使用mybatis进行数据持久化。
12 years ago
12 years ago
### 协议
webmagic遵循[Apache 2.0协议](http://opensource.org/licenses/Apache-2.0)
12 years ago
### 致谢
webmagic的架构和设计参考了以下两个项目感谢以下两个项目的作者
12 years ago
python爬虫 **scrapy** [https://github.com/scrapy/scrapy](https://github.com/scrapy/scrapy)
12 years ago
12 years ago
Java爬虫 **Spiderman** [https://gitcafe.com/laiweiwei/Spiderman](https://gitcafe.com/laiweiwei/Spiderman)
12 years ago