我有一个简单的Web爬网程序,它从根(给定的url)开始下载根页面的html,然后扫描超链接并对其进行爬网。我目前将html页存储在SQL数据库中。我目前面临两个问题:
我正在使用.Net框架,C#和MS SQL
最佳答案
因此,最重要的是,我不必担心要进行分布式爬网和存储,因为顾名思义,它需要相当数量的计算机才能使您获得良好的结果。除非您拥有计算机场,否则您将无法真正从中受益。您可以构建一个名为gets 300 pages per second and run it on a single computer with 150 Mbps connection的搜寻器。
列表上的下一件事是确定瓶颈在哪里。
对您的系统进行基准测试
尝试消除MS SQL:
如果1000个URL不能为您提供足够大的爬网,请获取10000个URL或100k个URL(或者,如果您觉得自己很勇敢,请获取Alexa top 1 million)。无论如何,请尝试建立一个排除了尽可能多的变量的基准。
识别瓶颈
在掌握了爬网速度的基线之后,然后尝试确定是什么原因导致了速度下降。此外,对于,您将需要开始使用多交易的,因为您受I/O约束,并且在获取页面之间有大量的空闲时间,您可以将这些页面用于提取链接和执行其他操作(例如使用数据库)。
您现在每秒获得几页?您应该尝试使每秒超过10页。
提高速度
显然,下一步是尽可能地调整您的搜寻器:
亲!
如果您已经掌握了以上所有内容,那么我建议您尝试成为专业人士!重要的是,您必须有一个模仿PageRank的良好选择算法,以便平衡新鲜度和覆盖范围:OPIC is pretty much the latest and greatest in that respect (AKA Adaptive Online Page Importance Computation)。如果您具有上述工具,那么您应该能够实现OPIC并运行一个相当快的爬网程序。
如果您对编程语言很灵活,并且不想与C#相距太远,则可以尝试使用基于Java的企业级爬网程序,例如Nutch。 Nutch与Hadoop和其他各种高度可扩展的解决方案集成。