2013-07-20 92 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中不存在的記錄時,都需要爲每個記錄插入一條記錄。因此,每次在插入記錄之前,都可以查詢現有記錄。 –