2013-03-20 79 views
2

请帮我解决以下案例:Scrapy案例:增量更新项目

想象一下典型的分类类别页面。包含项目列表的页面。当你点击你登陆内部页面的项目时。目前我的抓取工具会抓取所有这些网址,进一步抓取这些网址以获取该项目的详细信息,检查是否将最初的种子URL作为任何下一页。如果有,它进入下一页并执行相同的操作。我将这些项目存储在一个SQL数据库中。

说3天后,种子URL中有新的itmes,我只想报废新项目。可能的解决方案如下:

  1. 在抓取每个项目时,我检查数据库以查看URL是否已被抓取。如果有,我只是要求Scrapy停止进一步爬行。 问题:我不想每次查询数据库。我的数据库将会非常大,并且最终会导致爬行超慢。

  2. 我尝试存储上次抓取的网址,并在开始时传递它,并在发现此last_scraped_url时立即停止抓取工具。 由于抓取网址的异步性质不是按照从种子网址接收的顺序进行抓取,因此不可能进行抓取。 (我尝试了所有方法,使之在有序的方式 - 但是这根本不可能)

任何人可以提出任何其他的想法?过去三天我一直在努力挣扎。

欣赏您的回复。

+0

如何生成种子URL中的项目?你对此有任何控制吗? – 2013-03-21 00:27:29

回答

0

想给你一个想法之前...

我必须说,我会先试数据库选项。数据库就是为此而设计的,即使你的数据库变得非常大,这也不应该让爬行速度变得非常缓慢。 我学到了一个教训:“首先做哑巴实现,然后尝试优化。”大多数情况下,当你首先进行优化时,你只需优化错误的部分。

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