我正在创建一个杂乱的抓取工具,但默认的过滤器类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'
答案 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