2013-01-22 102 views
1

我刮一家網站,其結構是這樣的:項目緩存在Scrapy

Archive 
    Article 1 
     Authors 
      Author 1 
      Author 2 
     Title 
     Body 
     Comments 
      Comment 1 
      Comment 2 
    ... 

每個作者都在Authors都有自己的個人資料頁面。問題是作者寫了多篇文章,所以當我的蜘蛛抓取該網站時,我最終一次又一次地抄襲了同一作者的個人資料。

我如何使用Scrapy緩存作者配置文件?

+0

我覺得scrapy知道以前訪問過的鏈接,所以應該不抓取已經抓取的頁面 – user2134226

回答

1

您應該添加重複過濾像下面的例子:

from scrapy import signals 
from scrapy.exceptions import DropItem 

class DuplicatesPipeline(object): 

    def __init__(self): 
     self.author_ids_seen = set() 

    def process_item(self, item, spider): 
     if item['author_id'] in self.author_ids_seen: 
      raise DropItem("Duplicate item found: %s" % item) 
     else: 
      self.ids_seen.add(item['author_id']) 
      return item 

並激活DuplicatesPipeline在ITEM_PIPELINES列表,

ITEM_PIPELINES = [ 
    'myproject.pipeline.DuplicatesPipeline', 
] 
+0

謝謝,這正是我正在尋找的! – Blender

1

我認爲你需要實施新的緩存策略。 see here

也看一下HttpcacheMiddleware

我仍然困惑,爲什麼它去訪問頁面一次。他們的文檔說這是默認策略

此政策沒有任何HTTP緩存控制指令的意識。 每個請求及其相應的響應都被緩存。當再次看到相同的 請求時,將返回響應,但不會傳送任何來自Internet的 任何內容。