爬虫的数据结构

时间:2012-05-07 22:21:35

标签: web-crawler web-scraping

大家好!我打算写一个网站爬虫,它从根地址开始然后抓取每个找到的链接(只有内部链接)。所以我面对这个问题: Crawler必须从root开始,然后它应该解析网页(根页)然后获取所有链接。在获取链接时,它不应该抓取同一页面两次。伙计们有没有好的数据结构,还是我需要使用SQL或其他索引数据结构?

2 个答案:

答案 0 :(得分:4)

您可能正在寻找的数据结构是Tree

如果是爬虫,则不需要它,因为从根开始,您可以维护访问过的URL的“列表”,并且每次您要跟踪链接时,检查是否之前遇到过。如果没有遇到,则将其添加到列表中并按照它进行操作。

它不必是字面上的列表(即数组),但它可以是dictionary或其他有助于加速搜索的数据结构。

它也可以是SQL数据库或像redis这样的键值存储。如果您使用这样的东西,那么所有的索引和查询都将由数据库系统为您提供,您可以通过标准方法(SQL,特殊API,其他)与之通信。

但是,这很简单,在“抓取”中需要考虑一些更重要的事情,也许最好首先检查一下你要做的事情是否可以通过{{3}来完成}。

答案 1 :(得分:2)

我建议您在此处查看我的答案:Designing a web crawlerHow can I bring google-like recrawling in my application(web or console)

我已经回答了你提出的很多问题。离开的关键是爬虫使用URL-Seen测试,以便有效地确定他们是否应该抓取链接。 URL-Seen测试通常使用快速解析密钥(URL)的地图结构来实现。常用的解决方案是嵌入式数据库,如leveldb,berkeleydb和其他NOSQL解决方案。