`
香煎马鲛鱼
  • 浏览: 107095 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

webmagic——魔法般的爬虫框架

 
阅读更多

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可以实现一些通用的功能。

代码实例

新建工程:

 



 下一步:

 



 1、2项为必填,可以自定义;

GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
一般GroupID就是填com.leafive.test这样子。

项目生成后,目录结构为:

 




 
 J
ava_s为自己创建的;新建项目时,resources目录需要自己建(竟然没有自动生成)

我们在java下新建一个packagejava_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>

如果需要引用其他的包,需要在网上搜索他的groupidartfactidversion

最后单击工程右键——maven——reimport等它import结束就可以了

单机class右键选择run即可;

问题:

 



 出现错误:有些包没导入;

解决方法:选中报错字段,出现蓝色提示框后安Alt+Enter,编译器自动import

<!--EndFragment-->
  • 大小: 233.5 KB
  • 大小: 80.6 KB
  • 大小: 4.5 KB
  • 大小: 15.1 KB
  • 大小: 34.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics