我正在创建一个杂乱的爬虫,但默认过滤器类 RFPDupeFilte 在应用程序中无法正常工作。爬虫给了我很多重复的内容。
所以我尝试了以下示例, 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'
中指定的路径错误,导致导入错误。您可能丢失了一个包裹,或者包含了一个不该包含的包裹。
对于您的项目,找到“scrapy.cfg”文件,并从该点跟踪目录结构以确定要在字符串中使用的命名空间。为了保证您的正确,您的目录结构需要类似于:
myproject
|---<scraper>
| |---<spiders>
| | |---__init__.py
| | |---myspider.py
| |---__init__.py
| |---<...>
| |---custom_filters.py
| |---settings.py
|---scrapy.cfg
关于python - 如何创建自定义 scrapy URL 过滤器以避免重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302843/