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

标签 python scrapy web-crawler

我正在创建一个杂乱的爬虫,但默认过滤器类 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/

相关文章:

python - Torrent Tracker 信息哈希 GET 请求 - Python

java - 从 Java 到 Python webapp2 的 HTTPPost 多部分(上传文件)

当我在控制台之外执行时,Python 脚本执行目录发生变化

python - Scrapy 爬取带有 PostBack 数据 javascript url 的页面不会改变

php - 爬行抓取和线程?用PHP

python - 列出 import.io 中的提取器

python - 在 pygame 中暂停游戏和用户输入

python - Scrapy 选择直接子项

python - 如何抓取优惠券网站的优惠券代码(点击按钮即可获得优惠券代码)

python - 使用 Scrapy 抓取 arXiv xml 数据