我正在尝试用C++做一个非常简单的网络爬虫/蜘蛛应用程序.我一直在谷歌搜索一个简单的理解这个概念.我发现了这个:
http://www.example-code.com/vcpp/spider.asp
但是,它有点复杂/难以消化.
我想做的只是,例如:
输入网址:www.example.com(我将使用bash-> wget,获取内容/源代码)
然后,将寻找,也许"一个href"链接,然后存储在一些数据文件中.
对我来说,任何简单的教程或指南?
我刚开始学习C++(1个月)
好吧,我会试着指出你正确的方向.从概念上讲,webcrawler非常简单.它围绕一个存储挂起URL的FIFO队列数据结构.C++在标准库中具有内置队列结构std::queue
,您可以使用它将URL存储为字符串.
基本算法非常简单:
从您选择的基本URL开始,并将其放在队列的顶部
弹出队列顶部的URL并下载
解析下载的HTML文件并提取所有链接
将每个提取的链接插入队列
转到步骤2,或在达到某个指定限制后停止
现在,我说网络浏览器在概念上很简单,但实现它并不是那么简单.从上面的算法中可以看出,您需要:一个允许您下载URL的HTTP网络库,以及一个可以让您提取链接的优秀HTML解析器.您提到可以使用wget
下载页面.这稍微简化了一些事情,但您仍然需要实际解析下载的HTML文档.正确解析HTML是一项非常重要的任务.简单的字符串搜索有时只能工作.但是,如果这只是您用来熟悉C++的玩具程序,那么简单的字符串搜索就足以满足您的需要.否则,您需要使用严肃的HTML解析库.
编写网络浏览器时还需要考虑其他因素,例如礼貌. 如果您尝试从同一主机下载过多的页面,人们会生气并可能禁用您的IP.因此,您可能需要实施某种策略,其中您的webcrawler会在下载每个站点之前等待一段时间.您还需要一些机制来避免再次下载相同的URL,遵守机器人排除协议,避免爬虫陷阱等...所有这些细节加起来使实际实现强大的webcrawler并不是一件简单的事情.
也就是说,我赞同larsmans的评论.webcrawler不是学习C++的最佳方式.此外,C++并不是编写webcrawler的最佳语言.在编写像webcrawler这样的程序时,你在C++中获得的原始性能和低级访问是无用的,这些程序花费大部分时间等待URL解析和下载.在我看来,像Python这样的高级脚本语言更适合这项任务.
在以下位置检查用C ++编写的Web爬网程序和索引器:Mitza Web爬网程序 该代码可用作参考。干净,为网络爬虫编码提供了良好的开端。序列图可以在上面的链接页面上找到。