spider demo设计思路(修改版本)

本文介绍了一个多线程Spider的设计与优化过程,包括使用队列管理爬取任务、全局对象存储已爬取URL、并行线程抓取与分析网页等内容。优化措施包括引入线程池管理和采用CRC32算法提升效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前设计spider demo的思路:
1以Queue建立工作队列,保存正在爬行的url地址
2以Hashtable建立全局对象,保存已经爬行过的url地址
3创建工作线程类,进行网页抓取和分析工作,在分析中发现新的url,检测没爬行过后,直接向工作队列投递
4 主线程中直接建立固定多的并行线程,可避免线程的管理工作(如果实际商业化应用,还是采用ThreadPool进行线程管理,才能在减少线程开销的情况下,提高)
5 整体工作流程为:
由主线程启动所有并发线程进行爬取
每条线程爬取任务通过接口函数向主线程的Queue取的任务url并移除Queue里的任务url,保持先进先出,每次取第一个元素.
同时在任务过程中爬取到新的url,也向主线程Queue投递,其过程中必须lock
Queue,防止不同线程同时对Queue访问造成错误.
取得任务并完成后向Hashtable写入url,其过程也必须lock
每次抓区的页面以url的MD5码为文件名进行保存
 
经过测试这个程序能在共享 ADSL 4M带宽讯弛1.8G 1G DDR 4500转硬盘下开200线程每秒抓取400-430K数据,8-10个页面
 
由于只是为了实现多线程的spider demo没考虑太多功能,可以改进的地方还很多,例如直接开若干线程开销比较大,其实由于带宽原因,很多线程部分空闲.可以采用ThreadPool进行管理降低线程开销,降低CPU占用.用其他简单算法代替MD5,有独立线程负责抓取页面,另外线程专门分析和保存,工作分开等多种改进.
以上为原始版本,新版本主要使用了ThreadPool来自动管理线程 而非单纯的开辟固定数目线程 从而减少了实际的线程使用数 大量降低CPU占用  同时为了提高效率将MD5算法替换为CRC32 作为URL指纹运算 节约大量的工作时间提高效率 其它方面暂无调整

 代码下载地址:http://www.coogo.net/bbs/UploadFile/2006-11/200611214285244201.rar

(因采用.net 2.0部分新类,无法直接在.net 1.1下编译通过,如有需要请个人自行修改)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值