【问题标题】:How to force scrapy to crawl duplicate url?如何强制scrapy抓取重复的url?
【发布时间】:2014-04-17 10:57:12
【问题描述】:

我正在学习Scrapy一个网络爬虫框架。
默认情况下,它不会抓取重复的 url 或 scrapy 已经抓取的 url。

如何让Scrapy抓取重复的url或者已经抓取的url?
我试图在互联网上查找,但找不到相关帮助。

我从Scrapy - Spider crawls duplicate urls 找到了DUPEFILTER_CLASS = RFPDupeFilter 和SgmlLinkExtractor,但这个问题与我正在寻找的相反

【问题讨论】:

    标签: python web-crawler scrapy


    【解决方案1】:

    您可能正在寻找 Request() 上的 dont_filter=True 参数。 见http://doc.scrapy.org/en/latest/topics/request-response.html#request-objects

    【讨论】:

    • 但这也会禁用其他过滤器,例如离线
    【解决方案2】:

    更优雅的解决方案是完全禁用重复过滤器:

    # settings.py
    DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupeFilter'
    

    这样您就不必用dont_filter=True 将所有请求创建代码弄乱了。另一个副作用:这只会禁用重复过滤,而不会禁用任何其他过滤器,例如异地过滤。

    如果您想在项目中仅对多个蜘蛛中的一个或几个选择性地使用此设置,您可以在蜘蛛实现中通过custom_settings 进行设置:

    class MySpider(scrapy.Spider):
        name = 'myspider'
    
        custom_settings = {
            'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',
        }
    

    【讨论】:

    • 视情况而定,我可能有不止一个蜘蛛共享相同的常规设置。
    • 是的,在这种情况下,您最好使用 custom_settings 而不是 settings.py。调整答案以反映这一点。
    猜你喜欢
    • 2015-11-11
    • 2017-04-06
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2022-12-07
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多