python - 动态更改 scrapy 请求调度程序优先级

标签 python scrapy

我正在使用 scrapy 对内部网络应用程序执行测试。 完成所有测试后,我使用 CrawlSpider 检查所有地方,并为每个响应运行一个 HTML 验证程序,并查找 404 媒体文件。

除此之外它工作得很好:最后的抓取,GET 随机顺序的东西...... 因此,执行 DELETE 操作的 URL 在其他操作之前被执行。

我想安排在最后删除所有内容。我尝试了很多方法,使用这种调度程序:

来自 scrapy 导入日志

class DeleteDelayer(object):
    def enqueue_request(self, spider, request):
        if request.url.find('delete') != -1:
            log.msg("delay %s" % request.url, log.DEBUG)
            request.priority = 50

但它不起作用...我在日志中看到删除是“延迟”的,但它们是在执行期间执行的。

我想过使用一个中间件,它可以在内存中堆积所有删除的 URL,并在调用 spider_idle 信号时将它们放回内存中,但我不确定该怎么做.

实现此目标的最佳方法是什么?

最佳答案

  1. 请求的默认优先级是0,所以你设置优先级到50是行不通的
  2. 您可以使用中间件收集(将请求插入您自己的队列,例如,redis set)并忽略(返回 IngnoreRequest Exception)那些“删除”请求
  3. 使用第 2 步中从您的队列加载的请求开始第二次抓取

关于python - 动态更改 scrapy 请求调度程序优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16626328/

相关文章:

python - Scrapy 中的验证码

python - 在sklearn中使用自定义评分功能

python - 基于多列分箱(分类值)的最佳方式

python - 如何索引CSV文件以高效搜索?

scrapy - 通过Scrapy-Splash返回图像内容

python - 如何停止 scrapy 蜘蛛但处理所有想要的项目?

cookies - 如何将 Scrapy 登录 cookie 传递给 Selenium?

python - 禁用或限制/o/应用程序(django rest framework,oauth2)

python - 无法附加到列表

python - Scrapy/Selenium - 响应 url 未传递到网络浏览器