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官网
正文到此结束