Ubuntu web服务器上的Scrapy出现417错误

Ubuntu web服务器上的Scrapy出现417错误,scrapy,Scrapy,我一直在为一些新闻网站开发一个爬行脚本,并使用Scrapy来处理逻辑 当我在Ubuntu网络服务器上运行我的脚本时(如果有帮助的话,数字海洋),很多在我本地机器上返回200的网站变成了417 我想知道如果这是一个问题,我应该如何解决它?事实上,我不太确定它是否影响了最终的输出,但它似乎已经影响了 我自己的一些研究结果出现了: 。我已经尝试在我的请求中添加Expect头,但没有成功 我听说HTTP 1.1和1.0可能有问题?编辑:没有。Scrapy的HTTPDownloaderHandler会自

我一直在为一些新闻网站开发一个爬行脚本,并使用Scrapy来处理逻辑

当我在Ubuntu网络服务器上运行我的脚本时(如果有帮助的话,数字海洋),很多在我本地机器上返回200的网站变成了417

我想知道如果这是一个问题,我应该如何解决它?事实上,我不太确定它是否影响了最终的输出,但它似乎已经影响了

我自己的一些研究结果出现了:

  • 。我已经尝试在我的请求中添加Expect头,但没有成功

  • 我听说HTTP 1.1和1.0可能有问题?编辑:没有。Scrapy的HTTPDownloaderHandler会自动选择1.1(如果可用)


417是当您的客户说它期望内容类型a、b、c,但服务器可以提供的内容与这些类型中的任何一种都不匹配时,web服务器给您的错误


这看起来像是一个漏洞,或者更可能是配置错误。

您的公共ip地址似乎已经被禁止,或者是在您被要刮取的页面的web服务器刮取时被禁止。对于第一种情况,您可以重新启动实例以获得新的公共ip(至少在Amazon上是这样)。对于第二种情况,以下是来自的一些避免这种情况的提示:

  • 从浏览器中的已知用户代理池中旋转用户代理 (谷歌搜索以获得他们的名单)
  • 禁用cookies(请参阅启用cookies),因为某些站点可能会使用cookies来发现bot行为
  • 使用下载延迟(2或更高)。请参阅下载延迟设置
  • 如果可能,使用谷歌缓存获取页面,而不是点击 直接站点
  • 使用旋转IP池。例如,自由职业者 项目或付费服务,如ProxyMesh
  • 使用一个在内部绕过禁令的高度分布式下载程序,这样您就可以专注于解析干净的页面。这种下载程序的一个例子是Crawlera

此外,您可以减少spider中的设置,这对我来说很有用。

您是否在您的DOc Ubuntu机器中尝试过最低限度的测试?比如部署一个简单的google scrape spider并运行它?您是否尝试过查看Scrapy在远程环境中发送了什么请求?您确定您在本地环境中使用的所有LIB的版本都相同吗?我的意思是,如果它在您的本地计算机上运行,那么一定会有不同,您应该首先检查Scrapy及其依赖项嘿@GermanRosales:是的,我已经运行了最少的测试,以表明在我的本地计算机上运行的显然是Ubuntu计算机上的417。你说的“Scrapy在那个远程环境中发送什么请求”是什么意思?这是相同的get请求,可能具有相同的设置(如settings.py)。我目前正在更新所有依赖项…是的,通常它会发送相同的请求,具有相同的标题和正文,但是当您从服务器收到不同的响应时,检查请求在两个环境之间的差异将是健康的