繁体   English   中英

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

[英]A very simple C++ web crawler/spider?

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

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

但是,对我来说有点复杂/难以消化。

我想要做的只是,例如:

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

然后,会寻找,也许是“a href”链接,然后存储在某个数据文件中。

任何简单的教程,或我的指导方针?

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

好的,我会尽力为您指明正确的方向。 从概念上讲,网络爬虫非常简单。 它围绕存储待处理 URL 的 FIFO 队列数据结构展开。 C++ 在标准库std::queue有一个内置队列结构,您可以使用它来将 URL 存储为字符串。

基本算法非常简单:

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

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

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

也就是说,我同意 larsmans 在评论中的观点。 网络爬虫不是学习 C++ 的最佳方式。 此外,C++ 不是编写网络爬虫的最佳语言。在编写像网络爬虫这样的程序时,您在 C++ 中获得的原始性能和低级访问是无用的,因为它大部分时间都在等待 URL 解析和下载。 在我看来,像 Python 之类的高级脚本语言更适合这项任务。

检查这个用 C++ 编写的网络爬虫和索引器: Mitza web crawler代码可以作为参考。 干净并且为网络爬虫编码提供了良好的开端。 序列图可以在上面的链接页面中找到。

网络爬虫包含以下组件:

  • 下载 HTML 文件
  • 从中提取链接
  • 将所有链接推入队列
  • {如有必要,网络索引和排名}
  • 用队列的前面元素重复这个

这个拥有一切Web-Crawler

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM