如何创建自定义scrapy URL过滤器以避免重复



我正在创建一个scrappy爬虫,但是默认的过滤器类RFPDupeFilte在应用程序中不能正常工作。爬虫给了我很多重复的内容。

所以我试着下面的例子,如何根据scrapy

中的url过滤重复请求

但这对我不起作用。它给了我一个错误 importterror: No module named 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'中指定的路径错误,导致导入错误。很可能您丢失了一个包,或者包含了一个您不应该包含的包。

对于您的项目,找到您的"scrapy.cfg"文件,并从该点跟踪目录结构,以确定要在字符串中使用的命名空间。要使您的目录正确,您的目录结构需要类似于:

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

最新更新