在使用webMagic之前,先了解一下几个基本的知识
下面是WebMagic的架构图,从图中可以看出WebMagic有四个组件
b. PageProcessor PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。
c. Scheduler Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。
d. Pipeline Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。
testCompile group: 'junit', name: 'junit', version: '4.9'
compile group: 'us.codecraft', name: 'webmagic-core', version: '0.7.3'
compile group: 'us.codecraft', name: 'webmagic-extension', version: '0.7.3'
public class CnBlogProcessor implements PageProcessor {
//抓取网站的相关配置、编码、抓取间隔、重试次数等
private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
//计数器
private static int count = 0 ;
@Override
public void process(Page page) {
//判断连接是否满足
boolean flag = page.getUrl().regex("https://www.cnblogs.com/[a-z 0-9 -]+/p/[0-9]{7}.html").match();
if(!flag){
//加入满足条件的连接 xpath选取要爬取的div
page.addTargetRequests(page.getHtml().xpath("//*[@id=\"post_list\"]/div/div[@class='post_item_body']/h3/a/@href").all());
}else {
System.out.println("抓到的内容\n"+page.getHtml());
count++ ;
}
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) {
Spider.create(new CnBlogProcessor()).addUrl("https://www.cnblogs.com/").thread(5).run();
System.out.println("结束了"+count);
}
}
这是一个简单爬取博客园文章的小demo,主要的重点是正则的编写以及熟悉xpath的基本概念,在要爬取指定的内容时,使用xpath可以很方便的定位到要取得元素,网页中标签的xpath怎么获取呢?首先打开开发者工具,然后选定某一元素
因为要选中鼠标右键,截图的时候鼠标会跳动一下,没办法截全。这篇文章带大家简单入门,下一篇文章带大家深入了解,如有错误,请指正 WebMagic官方文档