原创

webmagic使用记录

1、引入pom

<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、简单的示例

2.1、注解定义接收的bean

  • ExtractBy使用正则表达式进行匹配抽取
  • multi表示匹配的是多条结果
@ExtractBy(value = "//*[@class=\"artbody\"]/img", multi = true)
public class TestBean {
    @ExtractBy("//img/@src")
    private String url;

    @ExtractBy("//img/@alt")
    private String title;
}

2.2、定义接收的处理器

  • 实现PageModelPipeline接口,自定义处理函数process保存处理结果
public class TestPageModelPipeline implements PageModelPipeline<TestBean> {
    private static final String saveDir = "D:\\";

    @Override
    public void process(TestBean textBean, Task task) {
        String title = textBean.getTitle();
        String url = textBean.getUrl();
        if (StringUtils.isNotBlank(url)) {
            savePic(url);
        }
    }

    private void savePic(String url) {
        HttpUtil.downloadFile(url, String.format("%s.jpg", saveDir+UUID.fastUUID().toString()));
    }
}

3、定义spider

  • site自定义header图片网站反爬虫
  • 其他的参数比如设置超时时间、重试次数、停顿时间、线程数
  • setExitWhenComplete表示任务为空的时候退出
  • setIsExtractLinks为false,表示不提取页面的链接,只是爬取当前页面,这个对于只想爬取单个页面的使用非常重要,很多没设置这个参数的,程序根本停不下来。
Site site = Site.me();
site.addHeader(
        "User-Agent",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
.setRetryTimes(1)
.setSleepTime(10000)
.setTimeOut(600);
String url = "https://www.gzcx.net";
Spider spider =OOSpider.create(site, new TestPageModelPipeline(), TestBean.class)
    .setIsExtractLinks(false)
    .addUrl(finalUrl)
    .thread(50);
spider.setExitWhenComplete(true);
spider.setEmptySleepTime(1);
spider.run();

4、参考

更多的内容,请参考webmagic官网

正文到此结束
本文目录