首页 > 技术文章 > WebMagic

Vinlen 2020-09-10 17:19 原文

今天有个新需求,让我爬取淘宝旗下某个网站的内容,本来是想自己手写的,后来听人说WebMagic有现成的框架

先加入maven(最好用maven,我demo用的maven,项目用的传统的jar包,结果发现jar包太多了,还是maven好自动管理依赖)

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

自己写一个类实现接口(包里有现成的demo,比如github baidu之类的,某些已经无法使用了)

public class AliPageProcessor implements PageProcessor {
    //两个参数分别为如果发生错误重连次数和每次爬完等待的时间,为了更好的模拟这边设置15秒
    private Site site = Site.me().setRetryTimes(1).setSleepTime(15000);
    @Override
    public void process(Page page) {
//使用正则过滤字符,最后放到key里 page.putField(
"title", page.getHtml().regex("<h2>(.*?)</h2>")); page.putField("content", page.getHtml().regex("<p(.*?)<p></p>"));
       //添加符合要求的下一次链接 加入队列 等待时间完毕之后爬取
page.addTargetRequests(page.getHtml().links().regex(xxxxx).all());

//取出key
if (page.getResultItems().get("title")!=null)
//处理数据 System.out.println(page.getResultItems().get(
"title").toString()); System.out.println(page.getResultItems().get("content").toString()); } //默认重写的方法 @Override public Site getSite() { return site; } }

类写好之后可以正式启用,写一个启动类

public class SpiderDemo  {
    public static void main(String[] args) {
        Spider.create(new AliPageProcessor()).addUrl("https://sf.taobao.com/notice_detail/3076493.htm").thread(1).run();
    }
}

每次启动一个线程去爬取

官方文档地址:http://webmagic.io/docs/zh/ 里面包含了下载,处理,管理,持久化 4个组件。

 

推荐阅读