该项目是一个百度搜索结果获取爬虫。
爬虫从一个文本文件中获取关键字组,查询获得结果后,将结果链接的内容下载存储到文件中。
- 下载jar文件和配置文件。 百度网盘
- 修改配置文件中的配置,最主要的是要指定关键字文件。
- 运行run.bat,即可开始爬取。
- 如果需要删除输出文件夹中的文件,需一并删除success.txt文件。
- 读取配置文件settings.properties
- 根据配置中指定的关键字文件路径,读取关键字
- 根据已下载文件success.txt,过滤掉已下载的关键字
- 发百度发送关键字查询
- 获取和解析百度的查询结果
- 请求查询结果指向的链接
- 获取链接指向的页面中的文本内容
- 将内容写入文件
- 如果获取的结果数量达到配置的最小值,则将关键字写入已下载文件success.txt。
直接使用httpclient获取页面会频繁出现乱码问题,即使添加了从页面获取charset的逻辑也不能很好的解决这个问题。
之前使用webmagic感觉很少出现乱码问题,所有我就直接使用了webmagic的下载器。
HttpClientDownloader downloader = new HttpClientDownloader();
Html html = downloader.download(url);
String htmlStr = html.get();
运行时乱码问题与使用的系统有关,此时运行时需要指定编码格式。
java -jar -Dfile.encoding=utf-8 filename.jar
百度的查询链接形如: https://www.baidu.com/s?wd=%E5%85%B3%E9%94%AE%E5%AD%97&pn=0
其中wd表示的是关键字,需要使用URLEncoder进行处理,pn表示的是页号,pn = (page-1)*10 ,默认页面大小是10。
百度的查询结果包括广告链接、指向百度自己产品的链接、其他结果链接,其中广告链接不计入页面大小的计数中。
所有链接的标题均使用h3标签,指向百度自己产品的链接的class为t c-gap-bottom-small,而指向其他结果链接的为t。
使用jsoup根据上面的规则可以很容易获取到结果链接。