WebMagic爬虫(一)基础版

WebMagic是码云上面一个很热门的爬虫框架,非常好用便捷

地址:https://gitee.com/flashsword20/webmagic  感谢作者

爬取一个页面的时候,有些网站会通过js渲染或者通过ajax渲染,普通的无渲染就可加载出来的页面此篇文件介绍,通过js简单渲染处理的数据下篇文章,要是用户想爬取ajax渲染出来的数据,请参考WebMagic文档作者介绍的方法:http://webmagic.io/docs/zh/posts/chx-cases/js-render-page.html

正文:

1.添加这两个主要的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>

2.业务层

WebMagic爬虫只需要实现PageProcessor这个类就可以开始写业务

package spider;


import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.HttpClientDownloader;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.proxy.Proxy;
import us.codecraft.webmagic.proxy.SimpleProxyProvider;

import java.util.List;

public class TestDemo implements PageProcessor {
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

    @Override
    public void process(Page page) {
        String list =   page.getHtml().xpath("*/html/html()").toString();
        page.putField("html",list);

        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());

        if (links.isEmpty()) {
            System.out.println("s==============跳过");
            page.setSkip(true);
        }else {
                System.out.println("s=============="+links.toString());
        }


        //dosomething,保存到数据库什么的


        // 部分三:从页面发现后续的url地址来抓取
        List<String> pageList = page.getHtml().xpath("/a/@href").all();
        page.addTargetRequests(pageList);
    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        //设置代理
        HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
        httpClientDownloader.setProxyProvider(SimpleProxyProvider.from(
                new Proxy("244.343.322.244",5332)
                ,new Proxy("4245.432.421.523",3242)
        ));

        Spider.create(new Test2())
                //从"https://www.csdn.net/"开始抓
                .addUrl("http://my.oschina.net/flashsword/blog")
                //配置代理
               /* .setDownloader(httpClientDownloader)*/
                //开启5个线程抓取
                .thread(5)
                //启动爬虫
                .run();

    }
}

这里通过page.addTargetRequests()方法来增加要抓取的URL,并通过page.putField()来保存抽取结果。page.getHtml().xpath()则是按照某个规则对结果进行抽取,这里抽取支持链式调用。调用结束后,toString()表示转化为单个String,all()则转化为一个String列表。

猜你喜欢

转载自blog.csdn.net/Java_Mrsun/article/details/85053059