【问题标题】:unable to crawl a website using scrappy but the same website can be requested and used using scrappy shell using same settings无法使用 scrappy 抓取网站,但可以使用相同的设置使用 scrappy shell 请求和使用相同的网站
【发布时间】:2021-12-04 06:39:13
【问题描述】:

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

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

我只是想通过“该房产已被代理删除”页面上的通知查找已售出的房产。

我知道该网站没有阻止我,因为我可以使用 scrappy shell 获取数据,并且查看(响应)也可以正常工作,我可以使用网络浏览器直接访问相同的 URL,因此 410 不会没道理我也可以从同一个域爬取页面, (ie) 没有通知“此属性已被代理删除”的页面。

任何帮助将不胜感激。

【问题讨论】:

    标签: web-scraping scrapy scrapy-splash


    【解决方案1】:

    似乎是当列表被 Rightmove 上的代理标记为删除时,网站将返回状态代码 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

    【讨论】:

    • 非常感谢。有效。我在网上搜索并没有得到明确的解释,你能告诉我'handle_httpstatus_list':[410],在做什么吗?它也可以帮助其他人
    • 当然,我已经添加了编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多