python - 是否可以从 scrapys 调度程序队列中删除请求?

标签 python scrapy

是否可以从 scrapy 的调度程序队列中删除请求?我有一个工作例程,可以在一定时间内限制对某个域的爬行。它的工作原理是,一旦达到时间限制,它将不再产生链接,但由于队列已经包含数千个域请求,我想在达到时间限制后将它们从调度程序队列中删除。

最佳答案

好吧,我最终听从了 @rickgh12hs 的建议并编写了我自己的下载器中间件:

from scrapy.exceptions import IgnoreRequest
import tldextract

class clearQueueDownloaderMiddleware(object):
    def process_request(self, request, spider):
        domain_obj = tldextract.extract(request.url)
        just_domain = domain_obj.registered_domain
        if(just_domain in spider.blocked):
            print "Blocked domain: %s (url: %s)" % (just_domain, request.url)
            raise IgnoreRequest("URL blocked: %s" % request.url)

spider.blocked 是一个包含阻止域的类列表变量,阻止从被阻止域进行任何进一步的下载。似乎工作得很好,感谢@rickgh12hs !

关于python - 是否可以从 scrapys 调度程序队列中删除请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438650/

相关文章:

python - 属性错误: 'Response' object has no attribute 'json'

Python:旋转矩阵到角度

python - Scrapy 抓取被 403/503 阻止

python - 无法将数据插入具有默认值的表

python - Scrapy:在没有 ScrapyFileLogObserver() 的情况下记录到文件

javascript - 使用回调使用 slider 更新 Bokeh 数据

python - 在python字典中动态访问键名

python - 我的代码似乎得到了不正确的推文计数

python - 如何从 Facebook 页面的 xhr 响应中获取有用的数据?

python - 如何将多个参数传递给 Scrapy 蜘蛛(不再支持使用多个蜘蛛运行 'scrapy crawl' 时出错)?