scrapy

2014-01-08 14 views
5

ですでに訪問したURLを無視これが私のcustom_filters.pyファイルですそれは何度も1つのURLを表示します。これは間違っていますか?scrapy

+1

あなたは結果ファイル(つまり、CSVファイル)が作成されたときに –

答えて

2

から:http://doc.scrapy.org/en/latest/topics/item-pipeline.html#duplicates-filter

from scrapy.exceptions import DropItem 

class DuplicatesPipeline(object): 

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

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

その後、あなたのsettings.py追加で:

ITEM_PIPELINES = { 
    'your_bot_name.pipelines.DuplicatesPipeline': 100 
} 

EDIT:重複したURLが使用のために

確認するには:

from scrapy.exceptions import DropItem 

class DuplicatesPipeline(object): 
    def __init__(self): 
     self.urls_seen = set() 

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

あなたの商品にはurl = Field()が必要です。このような何か(items.py):

from scrapy.item import Item, Field 

class PageItem(Item): 
    url   = Field() 
    scraped_field_a = Field() 
    scraped_field_b = Field() 
+2

に何が起こっているのか、重複レコードのために、こののみチェックを理解するために、あなたのDupeFilter 'request_seen'メソッドにログの行を追加することができます。これは、あなたのクモの中で重複したURLのフェッチをチェックしません。 – mattes