我正在尝试用C ++做一个非常简单的网络爬虫/蜘蛛应用程序。我一直在谷歌搜索一个简单的理解这个概念。我发现了这个:
http://www.example-code.com/vcpp/spider.asp
但是,它有点复杂/难以为我消化。
我想做的只是,例如:
输入网址:www.example.com(我将使用bash-> wget,获取内容/源代码)
然后,将查找,可能是“a href”链接,然后存储在某个数据文件中。
任何简单的教程或指南?
我刚开始学习C ++(1个月)
答案 0 :(得分:43)
好的,我会试着指出你正确的方向。从概念上讲,webcrawler非常简单。它围绕一个存储挂起URL的FIFO队列数据结构。 C ++在标准库std::queue
中有一个内置队列结构,您可以使用它来将URL存储为字符串。
基本算法非常简单:
现在,我说网络浏览器概念很简单,但实现它并不是那么简单。从上面的算法中可以看出,您需要:一个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)
网络抓取工具中包含以下组件:
这Web-Crawler一应俱全。
对于初学者来说,全面了解网络爬虫,多线程和网络排名的概念将非常有帮助。