Mik*_*e G 10 c# algorithm web-crawler
我有一个简单的网络爬虫,从root(给定的URL)开始下载根页面的html然后扫描超链接并抓取它们.我目前将html页面存储在SQL数据库中.我目前面临两个问题:
看起来爬行已达到瓶颈并且无法更快地爬行,我已经阅读过某些地方,对页面进行多线程http请求可以使爬虫爬得更快,但我不知道如何执行此操作.
第二个问题,我需要一个有效的数据结构来存储html页面并能够对它们运行数据挖掘操作(目前使用SQL数据库希望听到其他建议)
我正在使用.Net框架,C#和MS SQL
Kir*_*ril 11
首先,我不担心进入分布式爬行和存储,因为顾名思义:它需要相当数量的机器才能获得良好的结果.除非你有一个电脑农场,否则你将无法从中受益.您可以构建一个每秒300页的爬虫,并在具有150 Mbps连接的单台计算机上运行它.
列表中的下一件事是确定你的瓶颈在哪里.
尝试消除MS SQL:
如果1000个网址没有给你足够大的抓取次数,那么获得10000个网址或100k网址(或者如果你感觉很勇敢,那么获得Alexa排名前100万).在任何情况下,尝试建立一个基线,尽可能多地排除变量.
获得爬行速度的基线后,尝试确定导致速度下降的原因.此外,您将需要开始使用多重打字,因为您已经受到i/o限制,并且在获取页面之间有很多空闲时间,您可以花费在提取链接和执行其他操作(如使用数据库).
你现在每秒有多少页?你应该尝试每秒超过10页.
显然,下一步是尽可能地调整您的爬虫:
如果你已经掌握了上述所有内容,那么我建议你试着去亲!重要的是你有一个很好的选择算法来模仿PageRank以平衡新鲜度和覆盖率:OPIC在这方面几乎是最新的和最好的(AKA自适应在线页面重要性计算).如果您有上述工具,那么您应该能够实现OPIC并运行相当快的爬虫.
如果您对编程语言很灵活并且不想偏离C#太远,那么您可以尝试基于Java的企业级爬虫,如Nutch.Nutch与Hadoop以及各种其他高度可扩展的解决方案集成.
| 归档时间: |
|
| 查看次数: |
3254 次 |
| 最近记录: |