C#Windows.forms中的Web蜘蛛/爬虫

时间:2011-07-23 16:48:20

标签: c# web-crawler

我在VC#中创建了一个Web爬虫。抓取工具通过强制所有可能的.nl地址对来自.nl网站的某些信息进行索引,从http://aa.nl开始到(理论上)http://zzzzzzzzzzzzzzzzzzzz.nl

它可以正常工作,只是通过两个字母的域名需要很长的时间 - aa,ab ... zz。我计算了以这种方式经历所有领域需要多长时间,而且我有大约一千年。

我尝试通过线程来加速这一过程,但同时运行了1300个线程,WebClient一直在失败,使得结果数据文件太不准确而无法使用。

在Win7上,我无法访问5Mb / s互联网连接,E6300 Core2duo和2GB 533 @ 667mhz RAM。

有人知道如何做到这一点吗?任何想法都可以。 谢谢

3 个答案:

答案 0 :(得分:4)

combinatorial explosion使得这是不可能做到的(除非你至少可以等几个月)。我想尝试的是联系SIDN,他是.nl TLD的权威,并要求他们提供列表。

答案 1 :(得分:2)

IMO此类网络抓取工具的实施不合适

  1. 一次爬行需要执行的ping数量为~10 29
  2. 说每个ping需要200ms
  3. 处理100毫秒的时间
  4. 总时间估计3 * 10 4 * 10 29 ms~ 3 * 10 23 。如果我错了,请纠正我。

    如果你想利用线程,你需要为每个线程都有一个专用的核心。每个线程至少需要1 MB以上的内存。

    线程对你没有帮助,你可以假设地减少时间〜 3 * 10 20

    您获得的异常可能是线程同步问题的结果。

答案 2 :(得分:0)

我认为.Net中的HTTP支持最大并发连接限制大约为8(无论如何都在这个数字附近)

如果您创建了更多的HTTP请求,他们中的许多人将被迫等待可用的连接,因此在他们让一个有效的URI显示无效之前很久就会超时。