【问题标题】:How to catch redirects with curl or requests如何使用 curl 或 requests 捕获重定向
【发布时间】:2021-07-15 04:23:24
【问题描述】:

我是网络抓取的新手,偶然发现了一个意想不到的挑战。目标是为网站输入不完整的 URL 字符串,并“捕获”网站重定向功能返回的更正 URL 输出。我指的具体网站是Marine Traffic

在搜索特定的船舶资料时,正确的查询字符串应包含参数shipidmmsiimo。例如,此链接将返回一个网页,其中包含特定船只的资料:

https://www.marinetraffic.com/en/ais/details/ships/shipid:368574/mmsi:308248000/imo:9337987/vessel:AL_GHARIYA/_:97e0de64144a0d7abfc154ea3bd1010e

事实证明,只有 imo 参数的查询字符串将重定向到 exact 相同的 url。因此,例如,以下查询将重定向到与上述相同的查询:

https://www.marinetraffic.com/en/ais/details/ships/imo:9337987

我的问题是,在 bash 中使用 cURL 或其他此类工具(例如 python requests 库),如何以自动方式捕获重定向 URL?卷曲第一个 URL 会返回完整的 html,而卷曲第二个 URL 会引发拒绝访问错误。为什么浏览器允许这样做?如果有的话,解决方法是什么?捕获重定向 URL 的最佳做法是什么(使用 python 或 bash)?

curl https://www.marinetraffic.com/en/ais/details/ships/imo:9337987
#returns Access Denied

注意:将用户代理添加到 curl --user-agent 'Chrome/79' 并不能解决此问题。避免了错误,但没有返回任何内容。

【问题讨论】:

    标签: python curl redirect web-scraping python-requests


    【解决方案1】:

    您可以在响应对象上尝试.url

    import requests
    
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0"
    }
    
    url = "https://www.marinetraffic.com/en/ais/details/ships/imo:9337987"
    
    r = requests.get(url, headers=headers)
    print(r.url)
    

    打印:

    https://www.marinetraffic.com/en/ais/details/ships/shipid:368574/mmsi:308248000/imo:9337987/vessel:AL_GHARIYA
    

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多