c# – 在哪里存放网页抓取工具资料?
我有一个简单的网页抓取工具,从根(给定url)启动,下载根页面的html,然后扫描超链接并抓取它们.我目前将html页面存储在SQL数据库中.我目前面临两个问题:
>看起来爬网到达瓶颈,并且无法更快地爬行,我已经阅读了一些地方,为网页制作多线程http请求可以使爬网程序更快地爬行,但我不知道如何做到这一点. 我正在使用.Net框架,C#和MS SQL 解决方法
因此,首先,我不用担心进入分布式抓取和存储,因为顾名思义:它需要相当数量的机器才能获得良好的效果.除非你有一个电脑农场,否则你将无法真正受益.您可以构建一个
gets 300 pages per second and run it on a single computer with 150 Mbps connection的爬网程序.
列表中的下一件事是确定你的瓶颈在哪里. 对您的系统进行基准测试 尝试消除MS SQL: >加载您要爬网的1000个URL的列表. 如果1000个网址没有给你足够大的抓取,那么可以获得10000个URL或100k的URL(或者如果你觉得勇敢,那么可以获得Alexa top 1 million).无论如何,尝试建立一个尽可能多的变量被排除的基线. 识别瓶颈 在抓取抓取速度的基线之后,尝试确定导致您的减速的原因.此外,您将需要开始使用多任务,因为您已经被绑定,并且您在获取可以用于提取链接并执行其他操作数据的其他操作的页面之间有很多空余时间. 你现在每秒要多少页?你应该尝试每秒获得超过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和各种其他高度可扩展的解决方案相集成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |