非常简单的C++网络爬虫/爬行器?

Very Simple C++ Web Crawler/Spider?(非常简单的C++网络爬虫/爬行器?)
本文介绍了非常简单的C++网络爬虫/爬行器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

spider_simpleCrawler

但是,这对我来说很难理解,因为我大约在一个月前开始学习C++。

例如,我正在尝试执行以下操作:

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

  2. 可能要查找人力资源链接,然后将其存储在某个数据文件中(&Q;)。

Internet上是否有更简单的教程或指南?

推荐答案

好的,我试着给您指个正确的方向。从概念上讲,网络爬虫非常简单。它围绕存储挂起的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解析库。

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

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

这篇关于非常简单的C++网络爬虫/爬行器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

windeployqt doesn#39;t deploy qwindowsd.dll for a debug application(windeployqt不会为调试应用程序部署qwindowsd.dll)
QLineEdit: Show a processed text, not the entered one, but keep it (custom echo mode)(QLineEdit:显示已处理的文本,而不是输入的文本,但保留它(自定义回显模式))
Showing tooltip in a Qt chart with multiple y axes(在带有多个y轴的Qt图表中显示工具提示)
QTableView, how to change dragging multiple items display(QTableView,如何更改拖动多项显示)
How can I build Qt 5.13.2 with GCC 11.1 on Windows?(如何在Windows上用GCC 11.1构建Qt 5.13.2?)
singleton template as base class in C++(C++中作为基类的Singleton模板)