2013-07-20 96 views
0

我使用scrapy框架刮名称,价格和来自不同网站的手机的规格更新已刮掉价格。我已经成功地抓取了所有数据并将其存储在MySQL数据库中。逻辑在数据库

表结构 ID || Product_Url ||名称||价格|| Spec ||

现在,在第二天的一些产品价格的下降会从存储在我的数据库前一天值。我想更新我的数据库中的价格

在每天午夜时分,一个python程序将运行并检查哪些项目的价格发生了变化,如果发生了变化,它将更新该值。

我不想每天再次刮掉所有的产品链接,因为它们在编号非常大。审判20,000链接

所以,请大家帮我一些我应该适用的逻辑,以便我只需要刮掉那些价格改变的产品链接。

+0

您抓取的产品链接是否包含更新产品列表,以便您可以抓取该列表并刮取这些特定产品? –

+0

不,它没有更新产品列表 –

+0

我也回答了incase,如果它没有更新产品的列表。 –

回答

0
  1. 如果您刮有一个页面,它列出了最近更新的产品链接产品网站,你可以刮的是列表,从列表中更新这些产品。

  2. 但是,如果网站没有列出最近更新的产品的页面。您可能需要刮去所有寻找价格更新的产品链接(它不是最好的解决方案,但它的工作原理)。您可以通过发送多个请求来加速进程。

    这可以在项目settings中进行配置,将CONCURRENT_REQUESTS更新为所需的连接,您希望scrapy发送。

    既然你提到,有大约20,000个产品链接,你可以分配这个巨大的nos的任务。将运行scrapy蜘蛛的芹菜工作者之中。你可以运行大约4名工人,每个工作人员将运行scrapyspider,并且正在抓取5000个链接。

Ref。 http://doc.scrapy.org/en/latest/topics/settings.html

+0

如果我会刮去所有的链接,然后我如何更新相同的表,因为会有三种情况下,现在我将和该网页上列出了一些新产品,一些产品的价格变化是一些价格没有变化 –

+0

可以在多个芹菜工作者之间分发刮取任务,这些工作人员将查询您的单个数据库,并将刮取值与现有值进行比较,并更新DB值。它还会检查数据库中是否存在刮取的产品,如果不存在,则会为新产品插入新的记录。 –

+0

但是,您需要分配任务,以便单个工作人员只处理一系列产品(您可以使用产品ID作为参考)。例如。对于产品ID(范围为1到500),工作人员A将更新这些产品的记录。对于产品ID(范围在500到1000之间),工作人员B将更新其值。每次遇到DB中不存在的记录时,都需要为每个记录插入一条记录。因此,每次在插入记录之前,都可以查询现有记录。 –