【问题标题】:python urllib randomly appearing HTTP Error 405:python urllib随机出现HTTP错误405:
【发布时间】:2021-09-05 21:53:08
【问题描述】:

你好,知识渊博的人,

我正在编写代码以从特定网站的某些子页面中获取一些信息。

以下三行代码在 10 种情况中的大约 8 种情况下工作(同时使用相同的链接/URL,也已发布)。但在十分之二的情况下,我收到错误“HTTPError: HTTP Error 405:”。

我不知道为什么网页有时会拒绝我的请求,有时不会。 更重要的是:我如何重建此代码以确保在没有错误消息的情况下获得答案? (即使需要更多时间)

import urllib

link = 'https://www.immobilienscout24.de/expose/128433102?utm_medium=email&utm_source=system&utm_campaign=fulfillment_update&savedSearchId=116004747&immoTypeId=2&PID=113689187&referrer=ff_listing&utm_content=fulfillment_item#/'

f = urllib.request.urlopen(link)

【问题讨论】:

    标签: python urllib http-status-code-405


    【解决方案1】:

    同时我自己解决了:

    1. “尝试”中的请求
    2. 我为每个 url 写的 dict 是否有效
    3. 一个 while 循环,我在其中重复它在以前的时间不起作用的 url。
    4. 在没有成功的网页抓取的情况下没有留下任何网址后休息。
    5. 在这期间,我正在以我需要的方式转换数据。

    可能不是一个非凡的策略。

    今天循环了 9 轮,才 17 个链接全部被 srabed。

    我仍然对失败的原因和直接解决方案感到好奇。但是我的解决方案可以毫无问题地获得我想要的数据。

    【讨论】:

      【解决方案2】:

      HTTP 错误 405

      405不允许的方法。很可能您在预期 POST 时发送 GET 请求或在预期 GET 时发送 POST

      在没有错误信息的情况下确定得到答案? (即使需要更多时间)

      您应该首先询问资源它支持哪些方法。为此,使用了OPTIONS HTTP 动词。得到响应后,您可以检查标头中允许的方法(在Allow 下)并发送正确的请求。

      使用urllib.request发送OPTIONS的简单示例

      import urllib.request
      req_obj = urllib.request.Request("https://www.example.com",method="OPTIONS")
      response = urllib.request.urlopen(req_obj)
      print(response.headers['Allow'])
      

      输出

      OPTIONS, GET, HEAD, POST
      

      【讨论】:

      • 但它在 80% 的情况下都有效。你想告诉我,该方法在一秒钟内被允许,下一秒钟就不再允许了吗?
      • @ThomasR 方法是为每个 url 定义的,它们通常不应该是时间相关的
      • @Daweo 这就是我的想法。但是你的回答不是我问题的答案,是吗?您的代码 sn-p 与我的链接总是产生输出:“GET,HEAD,POST”。 (我在一个循环中尝试了 100 次。)但我的代码“urllib.request.urlopen(link)”仍然有 20% 的时间失败,出现“HTTP 错误 405:”。
      猜你喜欢
      • 1970-01-01
      • 2018-08-25
      • 2012-10-23
      • 2014-11-20
      • 2023-04-05
      • 2017-09-09
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多