Scrapy案例:项目的增量更新

时间:2013-03-20 17:03:32

标签: python screen-scraping scrapy

请帮我解决以下案例:

想象一下典型的分类类别页面。包含项目列表的页面。当您点击内置页面上的项目时。现在我的抓取工具会抓取所有这些网址,进一步抓取这些网址以获取该项目的详细信息,检查初始种子网址是否为下一页。如果有,它会转到下一页并执行相同的操作。我将这些项目存储在sql数据库中。

让我们说3天后,种子网址中有新的主题,我想只删除新项目。可能的解决方案是:

  1. 在抓取每个项目时,我会检查数据库以查看该URL是否已被删除。如果有,我只是让Scrapy停止进一步爬行。 问题:我不想每次都查询数据库。我的数据库非常庞大,最终会使爬行速度变得非常慢。

  2. 我尝试存储最后一个被抓取的URL并在开头传递它,当它找到这个last_scraped_url时,它只是停止了爬虫。 不可能,因为抓取URL的异步性质不会按照从种子URL接收的顺序进行删除。 (我尝试了所有方法,以有序的方式 - 但这根本不可能)

  3. 有人可以提出任何其他想法吗?过去三天我一直在努力奋斗。

    感谢您的回复。

1 个答案:

答案 0 :(得分:1)

在试图给你一个想法之前......

我必须说我会先尝试你的数据库选项。数据库就是为此而创建的,即使您的数据库变得非常大,这也不应该使爬网速度变得非常慢。 我学到了一个教训:"首先做愚蠢的实施。之后,您尝试优化。"大多数情况下,当您首先优化时,您只需优化错误的部分。

但是,如果你真的想要另一个想法...... Scrapy的默认设置不是两次抓取同一个url。因此,在开始抓取之前,您可以将已经删除的网址(3天前)放入Scrapy用于了解已访问过哪些网址的列表中。 (我不知道该怎么做。) 或者,更简单,在您的项目解析器中,您只需检查网址是否已被抓取并返回无或相应地刮取新项目。

相关问题