一个非常简单的C++网络爬虫/蜘蛛?

pop*_*y09 20 c++ web-crawler

我正在尝试用C++做一个非常简单的网络爬虫/蜘蛛应用程序.我一直在谷歌搜索一个简单的理解这个概念.我发现了这个:

http://www.example-code.com/vcpp/spider.asp

但是,它有点复杂/难以消化.

我想做的只是,例如:

输入网址:www.example.com(我将使用bash-> wget,获取内容/源代码)

然后,将寻找,也许"一个href"链接,然后存储在一些数据文件中.

对我来说,任何简单的教程或指南?

我刚开始学习C++(1个月)

Cha*_*via 45

好吧,我会试着指出你正确的方向.从概念上讲,webcrawler非常简单.它围绕一个存储挂起URL的FIFO队列数据结构.C++在标准库中具有内置队列结构std::queue,您可以使用它将URL存储为字符串.

基本算法非常简单:

  1. 从您选择的基本URL开始,并将其放在队列的顶部
  2. 弹出队列顶部的URL并下载
  3. 解析下载的HTML文件并提取所有链接
  4. 将每个提取的链接插入队列
  5. 转到步骤2,或在达到某个指定限制后停止

现在,我说网络浏览器在概念上很简单,但实现它并不是那么简单.从上面的算法中可以看出,您需要:一个允许您下载URL的HTTP网络库,以及一个可以让您提取链接的优秀HTML解析器.您提到可以使用wget下载页面.这稍微简化了一些事情,但您仍然需要实际解析下载的HTML文档.正确解析HTML是一项非常重要的任务.简单的字符串搜索<a href=有时只能工作.但是,如果这只是您用来熟悉C++的玩具程序,那么简单的字符串搜索就足以满足您的需要.否则,您需要使用严肃的HTML解析库.

编写网络浏览器时还需要​​考虑其他因素,例如礼貌. 如果您尝试从同一主机下载过多的页面,人们会生气并可能禁用您的IP.因此,您可能需要实施某种策略,其中您的webcrawler会在下载每个站点之前等待一段时间.您还需要一些机制来避免再次下载相同的URL,遵守机器人排除协议,避免爬虫陷阱等...所有这些细节加起来使实际实现强大的webcrawler并不是一件简单的事情.

也就是说,我赞同larsmans的评论.webcrawler不是学习C++的最佳方式.此外,C++并不是编写webcrawler的最佳语言.在编写像webcrawler这样的程序时,你在C++中获得的原始性能和低级访问是无用的,这些程序花费大部分时间等待URL解析和下载.在我看来,像Python这样的高级脚本语言更适合这项任务.

  • @ popurity09,C++是我最喜欢的语言之一,但我认为没有"最好"的编程语言.相反,某些语言比其他语言更适合某些任务.至于Google,我所知道的是他们的webcrawler的早期版本是用Python编写的. (10认同)
  • 我认为学习C++概念的更好的练习可能会实现某种产品数据库.每种产品都是不同的类,每个产品都继承自称为Product的基类.然后你可以进入更高级别的课程,如MilkProduct,MeatProduct等. (2认同)

小智 5

在以下位置检查用C ++编写的Web爬网程序和索引器:Mitza Web爬网程序 该代码可用作参考。干净,为网络爬虫编码提供了良好的开端。序列图可以在上面的链接页面上找到。

  • 而且它*改变了*!:/ (2认同)