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

时间:2016-10-28 10:09:41

标签: python scrapy web-crawler

我正在创建一个杂乱的抓取工具,但默认的过滤器类RFPDupeFilte在应用程序中无法正常工作。抓取工具给了我很多重复的内容。

所以我尝试了以下示例, how to filter duplicate requests based on url in scrapy

但它对我不起作用。它给了我一个eroor 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'

1 个答案:

答案 0 :(得分:1)

DUPEFILTER_CLASS = 'scraper.custom_filters.SeenURLFilter'中指定的路径错误,导致导入错误。您可能错过了一个包裹,或者包含了一个您不应该拥有的包裹。

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

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