2013-03-20 80 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或者相應地刮掉新的項目。