地址

gitee地址

项目介绍

  1. 一个简单的多线程爬虫,具有断点爬取功能,以及自动推测网页编码功能

  2. 使用jdk11+,maven构建,我使用jdk11.0.2时会报错,见https://bugs.openjdk.java.net/browse/JDK-8213202,jdk8却没有,jdk本身的bug,所以我换了最新版的jdk11.0.4

  3. 解析网页主要使用了Jsoup和正则表达式,所以这两个需要会用

使用说明

  1. 使用见example包中的示例,我就只说一下思路:先有一个或多个具体的初始链接,假如说把这些初始链接的页面记为seed,然后定义一个规则,规则主要由Jsoup选择器(类似于css选择器)、正则、type组成。seed页面应用规则,自动获取所有符合规则的链接,记为page1(假设type设置成了page1),然后所有的page1页面再应用下一个规则,依此类推,想要多少层都可以,注意,每层的type都不应该与其他层的type相同

  2. 定义规则自动获取下层链接,有时候可能得不到想要的结果,这时候可以试试手动获取,然后通过调用Page中的addNext…方法将手动获取的链接添加到下一层

  3. Page中还有3个参数是函数式接口的方法,作用是筛选链接,携带信息到下一层,链接映射,具体见方法说明和示例

  4. 如果以上没有说明白,就自行查看源代码,源代码比较简单

示例

ZongHeng zh = new ZongHeng();
zh.setCacheDirectory("f:/spider");
zh.config().setInterval(50).setBreakPoint(false);
//添加一个初始链接
zh.addSeed("http://www.zongheng.com/");
//添加一个规则,按照这个规则在初始链接页面取链接,并将取到的链接代表的页面记为category
zh.addRule("ul#data-groupdom li a", "http://www.zongheng.com/category/\\d+.html", "category");
//添加规则,在category页面取链接
zh.addRegex("http://book.zongheng.com/book/\\d+.html", "book");
zh.start();

局限

由于自动缓存的原因,编写好规则并爬取后,如果再次修改规则,如加入筛选条件等,由于从缓存中取数据,此时筛选条件对已经爬取的网页不起作用,要使它起作用,请删除缓存

感谢

版权声明:本文为pdzbokey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pdzbokey/p/11639779.html