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

时间:2010-11-25 14:20:34

标签: c++ web-crawler

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

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

但是,它有点复杂/难以为我消化。

我想做的只是,例如:

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

然后,将查找,可能是“a href”链接,然后存储在某个数据文件中。

任何简单的教程或指南?

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

3 个答案:

答案 0 :(得分:43)

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

基本算法非常简单:

  1. 以您的基本网址开头 选择,并将其放在顶部 你的队列
  2. 弹出队列顶部的网址 并下载它
  3. 解析下载的HTML文件并提取所有链接
  4. 将每个提取的链接插入队列
  5. 转到第2步,或在达到某个指定限制后停止
  6. 现在,我说网络浏览器概念很简单,但实现它并不是那么简单。从上面的算法中可以看出,您需要:一个HTTP网络库,允许您下载URL,一个很好的HTML解析器,可以让您提取链接。您提到可以使用wget下载页面。这稍微简化了一些事情,但您仍然需要实际解析下载的HTML文档。正确解析HTML是一项非常重要的任务。对<a href=的简单字符串搜索有时只会起作用。但是,如果这只是您用来熟悉C ++的玩具程序,那么简单的字符串搜索就足以满足您的需要。否则,您需要使用严肃的HTML解析库。

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

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

答案 1 :(得分:4)

检查以C ++编写的此Web爬网程序和索引器:Mitza web crawler 代码可以用作参考。干净,为一个良好的开端 webcrawler编码。序列图可以在上面的链接页面找到。

答案 2 :(得分:0)

网络抓取工具中包含以下组件:

  • 下载HTML文件
  • 从中提取链接
  • 将所有链接放入队列
  • {必要时对网站建立索引和排名}
  • 使用队列的前端元素重复此操作

Web-Crawler一应俱全。

对于初学者来说,全面了解网络爬虫,多线程和网络排名的概念将非常有帮助。