网络蜘蛛,网络爬虫

网络蜘蛛,网络爬虫

ID:14462729

大小:73.50 KB

页数:18页

时间:2018-07-28

上传者:U-4625
网络蜘蛛,网络爬虫_第1页
网络蜘蛛,网络爬虫_第2页
网络蜘蛛,网络爬虫_第3页
网络蜘蛛,网络爬虫_第4页
网络蜘蛛,网络爬虫_第5页
资源描述:

《网络蜘蛛,网络爬虫》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

网络蜘蛛笔记Java语言在此非常适合构建一个“蜘蛛”程序,其内建了对HTTP协议的支持,通过它可以传输大部分的网页信息;其还内建了一个HTML解析器,正是这两个原因使Java语言成为本文构建“蜘蛛”程序的首选。使用“蜘蛛”文章后面例1的示例程序,将会扫描一个网站,并寻找死链接。使用这个程序时需先输入一个URL并单击“Begin”按钮,程序开始之后,“Begin”按钮会变成“Cancel”按钮。在程序扫描网站期间,会在“Cancel”按钮之下显示进度,且在检查当前网页时,也会显示相关正常链接与死链接的数目,死链接将显示在程序底部的滚动文本框中。单击“Cancel”按钮会停止扫描过程,之后可以输入一个新的URL;如果期间没有单击“Cancel”,程序将会一直运行直到查找完所有网页,此后,“Cancel”按钮会再次变回“Begin”,表示程序已停止。下面将演示示例程序是如何与可复用“Spider”类交互的,示例程序包含在例1的CheckLinks类中,这个类实现了ISpiderReportable接口,如例2所示,正是通过这个接口,蜘蛛类才能与示例程序相交互。在这个接口中,定义了三个方法:第一个方法是“spiderFoundURL”,它在每次程序定位一个URL时被调用,如果方法返回true,表示程序应继续执行下去并找出其中的链接;第二个方法是“spiderURLError”,它在每次程序检测URL导致错误时被调用(如“404页面未找到”);第三个方法是“spiderFoundEMail”,它在每次发现电子邮件地址时被调用。有了这三个方法,Spider类就能把相关信息反馈给创建它的程序了。在begin方法被调用后,“蜘蛛”就开始工作了;为允许程序重绘其用户界面,“蜘蛛”是作为一个单独的线程启动的。点击“Begin”按钮会开始这个后台线程,当后台线程运行之后,又会调用“CheckLinks”类的run方法,而run方法是由Spider对象实例化时启动的,如下所示:spider=newSpider(this);spider.clear();base=newURL(url.getText());spider.addURL(base);spider.begin(); 首先,一个新的Spider对象被实例化,在此,需要传递一个“ISpiderReportable”对象给Spider对象的构造函数,因为“CheckLinks”类实现了“ISpiderReportable”接口,只需简单地把它作为当前对象(可由关键字this表示)传递给构造函数即可;其次,在程序中维护了一个其访问过的URL列表,而“clear”方法的调用则是为了确保程序开始时URL列表为空,程序开始运行之前必须添加一个URL到它的待处理列表中,此时用户输入的URL则是添加到列表中的第一个,程序就由扫描这个网页开始,并找到与这个起始URL相链接的其他页面;最后,调用“begin”方法开始运行“蜘蛛”,这个方法直到“蜘蛛”工作完毕或用户取消才会返回。当“蜘蛛”运行时,可以调用由“ISpiderReportable”接口实现的三个方法来报告程序当前状态,程序的大部分工作都是由“spiderFoundURL”方法来完成的,当“蜘蛛”发现一个新的URL时,它首先检查其是否有效,如果这个URL导致一个错误,就会把它当作一个死链接;如果链接有效,就会继续检查它是否在一个不同的服务器上,如果链接在同一服务器上,“spiderFoundURL”返回true,表示“蜘蛛”应继续跟踪这个URL并找出其他链接,如果链接在另外的服务器上,就不会扫描是否还有其他链接,因为这会导致“蜘蛛”不断地浏览Internet,寻找更多、更多的网站,所以,示例程序只会查找用户指定网站上的链接。构造Spider类前面已经讲了如何使用Spider类,请看例3中的代码。使用Spider类及“ISpiderReportable”接口能方便地为某一程序添加“蜘蛛”功能,下面继续讲解Spider类是怎样工作的。Spider类必须保持对其访问过的URL的跟踪,这样做的目的是为了确保“蜘蛛”不会访问同一URL一次以上;进一步来说,“蜘蛛”必须把URL分成三组,第一组存储在“workloadWaiting”属性中,包含了一个未处理的URL列表,“蜘蛛”要访问的第一个URL也存在其中;第二组存储在“workloadProcessed”中,它是“蜘蛛”已经处理过且无需再次访问的URL;第三组存储在“workloadError”中,包含了发生错误的URL。Begin方法包含了Spider类的主循环,其一直重复遍历“workloadWaiting”,并处理其中的每一个页面,当然我们也想到了,在这些页面被处理时,很可能有其他的URL添加到“workloadWaiting”中,所以,begin方法一直继续此过程,直到调用Spider类的cancel方法,或“workloadWaiting”中已不再剩有URL。这个过程如下:cancel=false;while(!getWorkloadWaiting().isEmpty()&&!cancel){Objectlist[]=getWorkloadWaiting().toArray();for(inti=0;(i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭