Wwsshh_147 2022-09-12 20:36 采纳率: 100%
浏览 32
已结题

python用requests库二次重定向失败,不再重定向,状态码200没有302或301

问题:Python爬取某网站图片,源代码里的url通过两次重定向到图片最终位置,requests.get(url)不能获得图片的最后位置
问题相关代码:

#网页源代码位置:view-source:https://www.caominhd.com/play/61601-0-0.html
url='https://bbcc.8ximg.com/?url=V48QM5z60wYeaLQvZuNgfWAMqu/gIqnrwiZttBF/hkyYrkabgZD3XGY6DlF7wkNF7jVwKnLRzl88Sq9AByeUZw&ly=A9tOYs2qggYCabA2dLdiJnoS/ezpbPa0nDE86kVp%27
re=requests.get(url)
print(re.url,
re.headers,
re.status_code,
re.history)
new_url=re.url
r=requests.get(new_url)
print(r.url,
r.headers,
r.status_code,
r.history)

运行结果及报错内容:

C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python.exe D:/Python程序制作/美图包/自定义出图程序.py
https://bbcc.8ximg.com/api/img.php?url=V48QM5z60wYeaLQvZuNgfWAMqu/gIqnrwiZttBF/hkyYrkabgZD3XGY6DlF7wkNF7jVwKnLRzl88Sq9AByeUZw
{'Server': 'nginx', 'Date': 'Mon, 12 Sep 2022 12:19:51 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000', 'Access-Control-Allow-Origin': '', 'Content-Encoding': 'gzip'}
200
[<Response [302]>]
https://bbcc.8ximg.com/api/img.php?url=V48QM5z60wYeaLQvZuNgfWAMqu/gIqnrwiZttBF/hkyYrkabgZD3XGY6DlF7wkNF7jVwKnLRzl88Sq9AByeUZw
{'Server': 'nginx', 'Date': 'Mon, 12 Sep 2022 12:19:51 GMT', 'Content-Type': 'text/html; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Strict-Transport-Security': 'max-age=31536000', 'Access-Control-Allow-Origin': '
', 'Content-Encoding': 'gzip'}
200
[]

进程已结束,退出代码0

我的解答思路和尝试过的方法:

requests.get()是默认允许重定向的
在源代码里找到图片的原始url,检查后发现经过连续两次重定向才到达图片的最后地址,我用requests库的r=requests.get(url) 再 print(r.url)却只得到第一次重定向后的新url,没有进行第二次重定向
对新url单独请求了一次,也没用,状态码是200不是302或301

我想能够弄到图片的最后地址,该代码想得到的最后地址为:’https://ss2.8ximg.com/img/pic/4945/1.jpg‘
  • 写回答

3条回答 默认 最新

  • honestman_ 2022-09-13 10:54
    关注

    把请求头加上就行了,代码如下,如果对你有帮助,请点击一下采纳,谢谢

    import requests
    
    
    headers = {
        "authority": "bbcc.8ximg.com",
        "accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
        "accept-language": "zh-CN,zh;q=0.9",
        "referer": "https://www.caominhd.com/",
        "sec-ch-ua": "\"Google Chrome\";v=\"105\", \"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"105\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"macOS\"",
        "sec-fetch-dest": "image",
        "sec-fetch-mode": "no-cors",
        "sec-fetch-site": "cross-site",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    }
    url = "https://bbcc.8ximg.com/"
    params = {
        "url": "BYAcYs73hlYeaLQvZuNgfWAMqu/gIqnrwiZttBF/hkyYrkabgZD3XGY6DlR7wkNF7jVwKnLRzl88S6ZNASWdbQ",
        "ly": "UokRasz80wYCabA2dLdiJnoS/ezpbPa1lTw66Exj"
    }
    response = requests.get(url, headers=headers, params=params)
    with open('xxx.jpg', 'wb') as f:
        f.write(response.content)
    print(response)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 已采纳回答 9月16日
  • 创建了问题 9月12日

悬赏问题

  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄
  • ¥50 资源管理器无法使用且一直崩溃重启
  • ¥15 用sql语句完成下列问题
  • ¥50 yalmip+Gurobi 求解线性规划
  • ¥15 微信开发者工具/云函数/数据库
  • ¥15 如何导出数据库中的表格
  • ¥15 Torch not compiled with CUDA enabled
  • ¥15 三种节点编号优化算法比较
  • ¥15 比特币ord程序wallet_constructor.rs文件支持一次性铸造1000个代币,并将它们分配到40个UTXO上(每个UTXO上分配25个代币),并设置找零地址