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.
 
 
 
 
Go to file
yihua.huang ff134a4fb7 add contributor 11 years ago
asserts add distributed architechure 11 years ago
en_docs update version in docs 11 years ago
lib update verion and lib 11 years ago
webmagic-avalon update verion and lib 11 years ago
webmagic-core Merge branch 'master' of git.oschina.net:flashsword20/webmagic 11 years ago
webmagic-extension Merge branch 'master' of github.com:code4craft/webmagic 11 years ago
webmagic-lucene update verion and lib 11 years ago
webmagic-panel update version back to 0.4.3 11 years ago
webmagic-samples update verion and lib 11 years ago
webmagic-saxon update verion and lib 11 years ago
webmagic-scripts Merge branch 'master' of github.com:code4craft/webmagic 11 years ago
webmagic-selenium update verion and lib 11 years ago
zh_docs update version in docs 11 years ago
.gitignore The SeleniumDownloader should call the setRawText 11 years ago
.travis.yml add jdk 12 years ago
README.md add contributor 11 years ago
make.sh update jar and docs 11 years ago
pom.xml fix pom 11 years ago
release-note.md #34 Close reader in FileCacheQueueScheduler 11 years ago
user-manual.md update version in docs 11 years ago
webmagic-avalon.md scripts readme 11 years ago

README.md

logo

Build Status

Readme in English

用户手册

webmagic是一个开源的Java垂直爬虫框架目标是简化爬虫的开发流程让开发者专注于逻辑功能的开发。webmagic的核心非常简单但是覆盖爬虫的整个流程也是很好的学习爬虫开发的材料。作者曾经在前公司进行过一年的垂直爬虫的开发webmagic就是为了解决爬虫开发的一些重复劳动而产生的框架。

web爬虫是一种技术webmagic致力于将这种技术的实现成本降低但是出于对资源提供者的尊重webmagic不会做反封锁的事情包括验证码破解、代理切换、自动登录等。

webmagic的主要特色

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

webmagic的架构和设计参考了以下两个项目感谢以下两个项目的作者

python爬虫 scrapy https://github.com/scrapy/scrapy

Java爬虫 Spiderman https://gitcafe.com/laiweiwei/Spiderman

webmagic的github地址https://github.com/code4craft/webmagic

快速开始

使用maven

webmagic使用maven管理依赖在项目中添加对应的依赖即可使用webmagic

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

WebMagic 使用slf4j-log4j12作为slf4j的实现.如果你自己定制了slf4j的实现请在项目中去掉此依赖。

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions>

项目结构

webmagic主要包括两个包

  • webmagic-core

    webmagic核心部分只包含爬虫基本模块和基本抽取器。webmagic-core的目标是成为网页爬虫的一个教科书般的实现。

  • webmagic-extension

    webmagic的扩展模块提供一些更方便的编写爬虫的工具。包括注解格式定义爬虫、JSON、分布式等支持。

webmagic还包含两个可用的扩展包因为这两个包都依赖了比较重量级的工具所以从主要包中抽离出来这些包需要下载源码后自己编译

  • webmagic-saxon

    webmagic与Saxon结合的模块。Saxon是一个XPath、XSLT的解析工具webmagic依赖Saxon来进行XPath2.0语法解析支持。

  • webmagic-selenium

    webmagic与Selenium结合的模块。Selenium是一个模拟浏览器进行页面渲染的工具webmagic依赖Selenium进行动态页面的抓取。

在项目中,你可以根据需要依赖不同的包。

不使用maven

在项目的lib目录下有依赖的所有jar包直接在IDE里import即可。

第一个爬虫

定制PageProcessor

PageProcessor是webmagic-core的一部分定制一个PageProcessor即可实现自己的爬虫逻辑。以下是抓取osc博客的一段代码

public class OschinaBlogPageProcesser implements PageProcessor {

    private Site site = Site.me().setDomain("my.oschina.net");

    @Override
    public void process(Page page) {
        List<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all();
        page.addTargetRequests(links);
        page.putField("title", page.getHtml().xpath("//div[@class='BlogEntity']/div[@class='BlogTitle']/h1").toString());
        page.putField("content", page.getHtml().$("div.content").toString());
        page.putField("tags",page.getHtml().xpath("//div[@class='BlogTags']/a/text()").all());
    }

    @Override
    public Site getSite() {
        return site;

    }

    public static void main(String[] args) {
        Spider.create(new OschinaBlogPageProcesser()).addUrl("http://my.oschina.net/flashsword/blog")
             .addPipeline(new ConsolePipeline()).run();
    }
}

这里通过page.addTargetRequests()方法来增加要抓取的URL并通过page.putField()来保存抽取结果。page.getHtml().xpath()则是按照某个规则对结果进行抽取这里抽取支持链式调用。调用结束后toString()表示转化为单个Stringall()则转化为一个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(),
			new ConsolePageModelPipeline(), OschinaBlog.class).addUrl("http://my.oschina.net/flashsword/blog").run();
    }
}

这个例子定义了一个Model类Model类的字段'title'、'content'、'tags'均为要抽取的属性。这个类在Pipeline里是可以复用的。

详细文档

webmagic manual.md

示例

webmagic-samples目录里有一些定制PageProcessor以抽取不同站点的例子。

webmagic的使用可以参考oschina openapi 应用:博客搬家

协议

webmagic遵循Apache 2.0协议

贡献者:

以下是为WebMagic提交过代码或者issue的朋友:

邮件组:

Gmail https://groups.google.com/forum/#!forum/webmagic-java

QQ: http://list.qq.com/cgi-bin/qf_invite?id=023a01f505246785f77c5a5a9aff4e57ab20fcdde871e988

QQ群

330192938