我在VC#中创建了一个Web爬虫。抓取工具通过强制所有可能的.nl地址对来自.nl网站的某些信息进行索引,从http://aa.nl开始到(理论上)http://zzzzzzzzzzzzzzzzzzzz.nl。
它可以正常工作,只是通过两个字母的域名需要很长的时间 - aa,ab ... zz。我计算了以这种方式经历所有领域需要多长时间,而且我有大约一千年。
我尝试通过线程来加速这一过程,但同时运行了1300个线程,WebClient一直在失败,使得结果数据文件太不准确而无法使用。
在Win7上,我无法访问5Mb / s互联网连接,E6300 Core2duo和2GB 533 @ 667mhz RAM。
有人知道如何做到这一点吗?任何想法都可以。 谢谢
答案 0 :(得分:4)
combinatorial explosion使得这是不可能做到的(除非你至少可以等几个月)。我想尝试的是联系SIDN,他是.nl TLD的权威,并要求他们提供列表。
答案 1 :(得分:2)
IMO此类网络抓取工具的实施不合适
总时间估计3 * 10 4 * 10 29 ms~ 3 * 10 23 年。如果我错了,请纠正我。
如果你想利用线程,你需要为每个线程都有一个专用的核心。每个线程至少需要1 MB以上的内存。
线程对你没有帮助,你可以假设地减少时间〜 3 * 10 20 年
您获得的异常可能是线程同步问题的结果。
答案 2 :(得分:0)
我认为.Net中的HTTP支持最大并发连接限制大约为8(无论如何都在这个数字附近)
如果您创建了更多的HTTP请求,他们中的许多人将被迫等待可用的连接,因此在他们让一个有效的URI显示无效之前很久就会超时。