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

2022-02-25 00:00:00 web-crawler 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之类的高级脚本语言更适合这项任务。

相关文章