📜  在scrapy中不要重定向= true (1)

📅  最后修改于: 2023-12-03 14:51:22.067000             🧑  作者: Mango

在 Scrapy 中不要重定向= True

在 Scrapy 中,默认情况下启用了 重定向= True,也就是说,当 Scrapy 发送请求时,如果服务器返回了一个重定向(例如:301,302),Scrapy 将自动跟随重定向。

虽然这可能会使编写网页爬取器变得更加简单,但实际上它对于整个爬取速度会产生负面影响,并且可能会对编写器的健壮性产生负面影响。这篇文章将解释为什么禁用 Scrapy 默认的重定向是一个好主意,以及如何禁用它。

为什么禁用重定向是个好主意

让我们看一个简单的例子。假设代码中有一个 ScrapySpider,该 Spider 需要从特定的网站读取数据。由于网站的结构已知,因此我们可以构建爬取器以适应它。

如果启用了默认的重定向,那么每个请求都需要处理两个请求 - 初始请求和跟随的重定向请求。这样的结果就是,尽管我们只需要覆盖整个网站的一小部分,但我们却要向服务器发送大量额外的请求。

如果禁用了默认的重定向,那么 Scrapy 只会发送一个初始请求和一个响应请求。我们不再担心服务器返回重定向,而是有责任在代码中确保我们处理任何重定向。

禁用 Scrapy 的默认重定向可以减少网络负载,并为编写器提供更细粒度的控制。这是一个优秀的实践,尤其是在爬取大型网站时非常重要。

如何禁用 Scrapy 的默认重定向

禁用 Scrapy 的默认重定向可以在设置(settings)中进行设置。 Scrapy 提供了一个名为 REDIRECT_ENABLED 的设置属性,可以通过此属性设置要使用的重定向策略。

以下是一个示例 Scrapy settings.py 文件,其中禁用了重定向:

REDIRECT_ENABLED = False

这会在代码中禁用默认的重定向和跟随,从而为 Scrapy 提供更细粒度的控制,并允许我们在代码中针对每个请求手动处理重定向。

总结

Scrapy 中,默认开启重定向,但是在某些情况下,禁用默认的重定向是推荐的,可以减少网络负载,并给 Scrapy 的开发者提供更细粒度的控制。要禁用默认的重定向,可以在 settings.py 文件中添加一个名为 REDIRECT_ENABLED 的设置属性,并将其设置为 False。