Web spider/crawler in C# Windows.forms
本文关键字:Windows forms in crawler spider Web | 更新日期: 2023-09-27 18:03:21
我用vc#创建了一个网络爬虫。爬虫通过强制使用所有可能的。nl地址(从http://aa.nl开始到(理论上)http://zzzzzzzzzzzzzzzzzzzz.nl)来索引来自。nl站点的某些信息。
它工作得很好,除了要花很长时间才能遍历两个字母的域- aa, ab…zz.我计算过以这种方式遍历所有域需要多长时间,我得到了大约一千年。
我试图通过线程来加速这一点,但是同时运行1300个线程,WebClient只是不断失败,使结果数据文件太不准确而无法使用。
我没有访问任何其他的5Mb/s的互联网连接,E6300 Core2duo和2GB的533@667mhz RAM在Win7上。
有谁知道该怎么做才能做到这一点吗?任何主意都可以。谢谢你
组合爆炸使得这是不可能做到的(除非您至少可以等待几个月)。我想尝试的是联系。nl顶级域名的权威机构SIDN,并向他们索要列表。
IMO这样的网络爬虫的实现是不合适的
- 一次爬行需要执行的ping数是~ 1029
- 假设每个ping需要200ms
- 处理时间100 ms
总时间估计3*104*1029 ms ~ 3*1023年。如果我说错了,请纠正我。
如果你想利用线程,你需要为每个线程有一个专用的内核。每个线程将至少占用1+ MB的内存。
线程不会在这里帮助你,你可以假设将时间减少到~ 3*1020年
您得到的异常很可能是线程同步问题的结果。
我认为。net中的HTTP支持的最大并发连接限制默认为8左右(无论如何都在这个数字附近)
如果你创建了更多的HTTP请求,它们中的许多将被迫等待一个可用的连接,因此在它们得到一个有效的uri看起来无效之前很久就会超时。