无法使用 scrappy 抓取网站,但可以使用相同的设置使用 scrappy shell 请求和使用相同的网站

unable to crawl a website using scrappy but the same website can be requested and used using scrappy shell using same settings

我正在尝试抓取网站 https://www.rightmove.co.uk/properties/105717104#/?channel=RES_NEW 但我收到 (410) 错误

信息:忽略响应 <410 https://www.rightmove.co.uk/properties/105717104>:HTTP 状态代码未处理或不允许

我只是想使用页面上的通知“此 属性 已被代理删除。”来查找已售出的房产。

我知道该网站没有阻止我,因为我可以使用 scrappy shell 来获取数据并且查看(响应)也很好,我可以直接转到相同的 URL 使用网络浏览器所以 410 没有意义我也可以从同一域抓取页面, (即)没有通知“此 属性 已被代理删除。”的页面。

如有任何帮助,我们将不胜感激。

似乎是当一个列表被 Rightmove 上的代理商标记为删除时,该网站将 return 状态代码 410 Gone(这很奇怪)。但要解决这个问题,只需在您的请求中做这样的事情:

def start_requests(self):
    yield scrapy.Request(
        url='https://www.rightmove.co.uk/properties/105717104#/?channel=RES_NEW',
        meta={
            'handle_httpstatus_list': [410],
        }
    )

编辑

说明:基本上,Scrapy 只会处理来自 200-299 范围内的响应的状态码,因为 2XX 意味着这是一个成功的响应。在你的例子中,你得到了一个 4XX 状态代码,这意味着发生了一些错误。通过传递 handle_httpstatus_list = [410] 我们告诉 Scrapy 我们希望它也处理 410 响应而不仅仅是 200-299.

这是文档:https://docs.scrapy.org/en/latest/topics/spider-middleware.html#std-reqmeta-handle_httpstatus_list