一个简易的Java多页面队列爬虫程序

本文介绍了一个基于Java实现的多页面队列爬虫程序,利用PriorityQueue进行宽度优先搜索,避免重复爬取并支持PageRank算法。通过httpclient和htmlparser工具包下载并解析网页,详细步骤包括创建种子URL、初始化未访问表、核心逻辑实现、下载及解析工具的使用。
摘要由CSDN通过智能技术生成

一、 序言

实现这个爬虫需要两个数据结构支持,unvisited队列(priorityqueue:可以适用pagerank等算法计算出url重要度)和visited表(hashset:可以快速查找url是否存在);队列用于实现宽度优先爬取,visited表用于记录爬取过的url,不再重复爬取,避免了环。java爬虫需要的工具包有httpclient和htmlparser1.5,可以在maven repo中查看具体版本的下载。
1、目标网站:新浪 http://www.sina.com.cn/ 2、结果截图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6k0mbeUt-1616421436057)(https://upload-images.jianshu.io/upload_images/25993207-ee1ac82f671f4a5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

下面说说爬虫的实现,后期源码会上传到github中,需要的朋友可以留言:

**二、爬虫编程 **

1、创建种子页面的url

MyCrawler crawler = new MyCrawler();
crawler.crawling(new String[]{“http://www.sina.com.cn/”});

2、初始化unvisited表为上面的种子url

LinkQueue.addUnvisitedUrl(seeds[i]);

3、最主要的逻辑实现部分

在队列中取出没有visit过的url,进行下载,然后加入visited的表,并解析改url页面上的其它url,把未读取的加入到unvisited队列;迭代到队列为空停止,所以这个url网络还是很庞大的。注意,这里的页面下载和页面解析需要java的工具包实现,下面具体说明下工具包的使用。

while(!LinkQueue.unVisitedUrlsEmpty()&&LinkQueue.getVisitedUrlNum()<=1000)
  {
   
   //队头URL出队列
   String visitUrl=(String)LinkQueue.unVisitedUrlDeQueue();
   if(visitUrl==null)
    continue;
   DownLoadFile downLoader=new DownLoadFile();
   //下载网页
   downLoader.downloadFile(visitUrl);
   //该 url 放入到已访问的 URL 中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值