大家好!我要编写网站爬虫,它从根地址开始,然后爬取每个找到的链接(仅限内部链接)。所以我面临这个问题:爬虫必须从根开始,然后它应该解析网页(根页面)然后获取所有链接。在获取链接时,它不应两次抓取同一页面。伙计们有什么好的数据结构还是我需要使用 SQL 或其他索引数据结构?
问问题
5437 次
2 回答
4
您可能正在寻找的数据结构是Tree。
但是对于爬虫来说,不需要它,因为从根目录开始,您可以维护一个访问过的 URL 的“列表”,并且每次您要跟踪一个链接时,检查之前是否遇到过它。如果还没有遇到,则将其添加到列表中并遵循它。
不过,它不一定是一个列表(即数组),它可以是一个字典或其他有助于加快搜索速度的数据结构。
它也可以是 SQL 数据库或类似redis之类的键值存储。如果您使用类似的东西,那么所有索引和查询都将由数据库系统为您提供,您可以通过标准方法(SQL、特殊 API 等)与之通信。
然而,这很容易,在“爬行”中还有一些更重要的事情需要考虑,也许最好先检查一下你正在尝试做的事情是否可以使用已经可用的 crawler来完成。
于 2012-05-07T22:45:02.290 回答
2
我建议在这里查看我的答案:设计网络爬虫以及如何在我的应用程序(网络或控制台)中带来类似谷歌的重新抓取
我已经回答了你问的很多问题。要放弃的关键是爬虫使用 URL-Seen 测试来有效地确定他们是否应该爬取链接。URL-Seen 测试通常使用快速解析键(url)的映射结构来实现。常用的解决方案有leveldb、berkeleydb等嵌入式数据库等NOSQL解决方案。
于 2012-05-08T20:54:24.633 回答