如何在Scrapy中创建自定义ResponseType?

时间:2019-09-25 14:40:06

标签: python scrapy

我有兴趣通过添加自定义ResponseType在我的项目中扩展Scrapy。现在,我想添加一个PDF类型,该类型将使用PDFMiner返回纯文本和文档结构(包括链接)。我以后可能要添加其他文档类型。

从哑剧类型到响应类的映射似乎发生在scrapy.responsetypes中,尤其是CLASSES中的ResponseTypes字典。但是,尚不清楚是否/如何将其与自定义响应类一起覆盖。该文件末尾的responsetypes变量在其他一些地方直接引用,在Scrapy项目设置中我看不到对该类的任何引用。此外,我在Scrapy文档中找不到有关如何执行此操作的任何信息。

我当然可以分叉Scrapy并使用定义了自定义类的我自己的版本,但这会带来维护上的麻烦。

在Scrapy中定义自定义响应类型的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到这一点。 Scrapy希望您对它的默认响应类型感到满意。
可以替换使用此类的下载处理程序和中间件,但这可能会太多工作...

获得相似结果的最简单方法可能是添加一个额外的下载中间件,该中间件将:

  • 被称为所有其他(相关)下载器中间件
  • 检查草率创建的响应的Content-Type标头
  • 如果需要,将响应替换为您的自定义响应

这确实做了额外的工作(在完成正常处理后创建了一个额外的响应对象),但是它比替代方法要容易得多。

相关问题