2016-10-28 112 views
1

我創建了一個scrappy爬蟲,但默認過濾器類RFPDupeFilte在應用程序中無法正常工作。爬蟲給了我很多重複的內容。如何創建自定義scrapy URL過濾器以避免重複?

,所以我嘗試下面的例子中, how to filter duplicate requests based on url in scrapy

但它沒有爲我工作。它給我一個很大的影響ImportError:沒有名爲scraper.custom_filters的模塊,即使我將它保存在settings.py的相同目錄下的custom_filters.py類中。

from scrapy.dupefilter import RFPDupeFilter 

class SeenURLFilter(RFPDupeFilter): 
    """A dupe filter that considers the URL""" 

    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) 

添加DUPEFILTER_CLASS常數settings.py中:在指定DUPEFILTER_CLASS = 'scraper.custom_filters.SeenURLFilter'

DUPEFILTER_CLASS = 'scraper.custom_filters.SeenURLFilter' 
+0

您必須共享您嘗試的代碼並顯示完整的錯誤消息。 – Marcs

+0

好的,我只是更新了示例中的源代碼。 –

+0

您可以將目錄結構添加到問題中嗎? –

回答

1

你的道路是錯誤的,導致導入錯誤。很可能你錯過了一個包,或者包含了你不應該擁有的包。

對於您的項目,找到您的「scrapy.cfg」文件,並從該點跟蹤目錄結構以確定要在字符串中使用的名稱空間。對於您的目錄結構,您的目錄結構需要與以下內容類似:

myproject 
    |---<scraper> 
    | |---<spiders> 
    | | |---__init__.py 
    | | |---myspider.py 
    | |---__init__.py 
    | |---<...> 
    | |---custom_filters.py 
    | |---settings.py 
    |---scrapy.cfg