2014-01-08 12 views
5

Das ist meine custom_filters.py Datei:Ignorieren bereits besuchte URLs in scrapy

from scrapy.dupefilter import RFPDupeFilter 

class SeenURLFilter(RFPDupeFilter): 

    def __init__(self, path=None): 
     self.urls_seen = set() 
     RFPDupeFilter.__init__(self, path) 

    def request_seen(self, request): 
     if request.url in self.urls_seen: 
      return True 
     else: 
      self.urls_seen.add(request.url) 

Added die Zeile:

DUPEFILTER_CLASS = 'crawl_website.custom_filters.SeenURLFilter' 

settings.py

Wenn ich die CSV-Datei überprüfen erzeugt Es zeigt eine URL viele Male. Ist das falsch?

+1

Sie könnten Protokollzeilen zu Ihrem DupeFilter 'request_seen' Methode hinzufügen zu verstehen, was auf –

Antwort

2

Von: 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 

Dann in Ihrem settings.py add:

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

EDIT:

für doppelten URLs Um zu überprüfen, verwenden:

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 

Dies erfordert eine url = Field() in Ihrem Artikel. So etwas wie diese (items.py):

from scrapy.item import Item, Field 

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

gehe dies nur prüft, ob doppelten Datensätze, wenn eine Ergebnisdatei (zB CSV-Datei) erstellt wird, . Dies wird nicht auf doppelte URL-Aufrufe in Ihrem Spider überprüfen. – mattes

Verwandte Themen