You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests.get未处理HTTP重定向致爬虫应用崩溃求助

解决Requests模块处理重定向时的崩溃问题

嘿,我帮你排查下这个爬虫重定向的问题!你的代码里有几个潜在的坑,导致处理像http://www.yahoo.com这类重定向URL时崩溃,咱们一步步来修复:

问题分析

  • URL拼接错误:你手动给输入的URL加http://,如果用户输入的URL已经包含http://或https://(比如用户直接输入https://www.yahoo.com),就会变成http://https://www.yahoo.com,这种无效URL会直接导致请求失败。
  • 缺少异常捕获:requests请求过程中可能遇到各种错误(比如重定向次数过多、网络问题、无效URL),没有异常处理的话,程序直接崩溃。
  • 虽然requests默认自动处理重定向(allow_redirects=True是默认值),但错误的URL会让这个机制根本无法启动。

修复后的代码示例

我把你的代码修改一下,解决这些问题:

from urllib.parse import urlparse  # 导入URL解析工具
import requests

if request.method == 'POST' and form.validate():
    # 获取表单数据
    url = form.url.data
    email = form.email.data
    
    # 插入数据库的逻辑不变
    mymsg = [{
        "url": url,
        "email": email,
    }]
    x = mycol.insert_many(mymsg)
    print("inserting this item: ", mymsg, "in the database called ", mycol)
    
    # 修复URL协议头问题
    parsed_url = urlparse(url)
    if not parsed_url.scheme:  # 如果URL没有协议头(http/https)
        url1 = f"http://{url}"
    else:
        url1 = url  # 已有协议头,直接使用
    
    try:
        # 显式指定重定向(默认就是True,写出来更清晰)
        result = requests.get(url1, allow_redirects=True, timeout=10)  # 加超时避免挂起
        result.raise_for_status()  # 抛出HTTP错误状态码的异常(比如4xx、5xx)
        
        print("原始请求URL: ", url1)
        print("重定向后的最终URL: ", result.url)  # 查看重定向后的地址
        print("状态码: ", result.status_code)
        print("响应头: ", result.headers)
    except requests.exceptions.RequestException as e:
        # 捕获所有requests相关异常,避免程序崩溃
        print(f"请求出错: {str(e)}")
        # 这里可以添加错误提示给用户的逻辑,比如返回错误页面

关键改进点

  • URL协议头处理:用urlparse检查输入URL是否已有协议,避免重复拼接导致的无效URL。
  • 异常捕获:用try-except包裹请求逻辑,捕获所有RequestException,即使出错也能优雅处理,不会直接崩溃。
  • 超时设置:给requests.get加timeout参数,避免请求长时间挂起占用资源。
  • raise_for_status():主动抛出HTTP错误(比如404、500),方便你排查请求失败的具体原因。

这样修改后,再测试http://www.yahoo.com这类重定向URL,就不会崩溃了,还能看到最终重定向到的地址~

内容的提问来源于stack exchange,提问作者user11733473

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:33