暂时了解的内容, 总结一下如下图:
webmagic是参考Scrapy,实现由HttpClient,Jsoup等。
四大组件:Downloader、pageProcessor、Scheduler、Pipeline组件合并完成多线程的任务。以实现对爬虫的功能进行定制。
Spider是将这几个组件组织在一起,可以认为它是一个大容器,是webmagic的核心
Scheduler:
-
对待抓取的URL队列进行管理
-
对已抓取的URL进行去重
核心:webmagic-core包中。其他包则是该包的扩展
实用:虽然核心功能简单,但也有自己的扩展方式,如基于注解模式的爬虫开发
- Requst: 是对URL地址的一层封装,一个request对应一个URL地址。它是PageProcessor与Downloader交互的载体,也是PageProcessor控制Downloader唯一方式(PageProcessor解析页面获取url,将url给了Downloader去下载)。
- Page: 代表从Downloader下载的一个页面,可能是HTML,也可能是JSON或者其它格式的内容。
- ResultItems: 相当于Map, 保存了PageProcess解析处理的结果,供Pipeline使用。
addTargetRequests 抓取超链接
putField 结果属性
site 设置请求信息
后续更新…
2020-04-27 晚
官方图片如下:
PageProcessor 负责解析页面,抽取有用信息,以及发现新的链接。需要自己定义。
Scheduler 负责管理待抓取的URL,以及一些去重的工作。一般无需自己定制Scheduler。
Pipeline 负责抽取结果的处理,包括计算、持久化到文件、数据库等。
Downloader 负责从互联网上下载页面,以便后续处理。一般无需自己实现。
WebMagic框架支持多种抽取方式,包括xPath、css选择器、正则表达式。
例子:
public class DouyuProcessor implements PageProcessor {
private Site site = Site
.me()
.setDomain("www.douyu.com")
.setSleepTime(3000)
.setUserAgent(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");
@Override
public Site getSite() {
return site;
}
@Override
public void process(Page page) {
// 这个page就是webmagic下载的页面代码,对它用xpath语法操作
List<String> all = page.getHtml().xpath("//*[@id=\"listAll\"]/div/ul/li/div/a/div/div/h3/text()").all();
for(String str : all){
System.out.println(str);
}
System.out.println("总个数为: " + all.size());
//page.putField("msg",page.getHtml().xpath("//*[@id=\"listAll\"]/div/ul/li/div/a/div/div/h3/text()").all());
}
public static void main(String[] args) {
Spider.create(new DouyuProcessor()).addUrl("https://www.douyu.com/g_LOL")
.run();
}
}
效果: