使用Python3.6解析网站遇urllib.error.HTTPError 302无限重定向问题求助
解决urllib.error.HTTPError: 302无限重定向问题
嘿,这个302无限重定向的问题我之前也踩过坑!本质是目标网站识别出你的请求不是正常浏览器发起的,或者urllib默认的重定向逻辑没跟上网站的跳转规则,导致一直在循环跳转。给你几个实用的解决思路和改进后的代码:
- 给请求加个「浏览器身份」:很多网站会拦截urllib默认的请求头,识别出是爬虫就反复重定向,模拟浏览器的User-Agent就能解决大部分这类问题。
- 改用更省心的请求库:urllib的重定向处理比较死板,
requests库默认会自动处理重定向,还能帮你自动管理cookie,操作起来简洁很多。
改进后的urllib版本代码
from urllib.request import urlopen, Request from bs4 import BeautifulSoup import ssl # 保留你原来的忽略SSL证书逻辑 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE # 模拟浏览器的请求头,避免被识别为爬虫 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } url = "你的目标URL" # 用Request对象包装请求,带上自定义headers req = Request(url, headers=headers) try: response = urlopen(req, context=ctx) html = response.read() soup = BeautifulSoup(html, 'html.parser') # 在这里写你的HTML解析逻辑 except urllib.error.HTTPError as e: print(f"HTTP错误: {e}") except Exception as e: print(f"其他错误: {e}")
更推荐的requests版本代码
如果可以的话,建议直接换成requests库(安装命令:pip install requests),它的重定向处理更智能,代码也更简洁:
import requests from bs4 import BeautifulSoup import ssl # 保留忽略SSL证书的逻辑 ssl._create_default_https_context = ssl._create_unverified_context # 同样模拟浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } url = "你的目标URL" try: # requests默认自动处理重定向,最多30次,不会陷入无限循环 response = requests.get(url, headers=headers, verify=False) response.raise_for_status() # 主动抛出HTTP请求错误 soup = BeautifulSoup(response.text, 'html.parser') # 在这里写你的HTML解析逻辑 except requests.exceptions.HTTPError as e: print(f"HTTP错误: {e}") except Exception as e: print(f"其他错误: {e}")
如果以上方案还是不行,那可能是目标网站需要登录权限,你得先获取登录后的Cookie再携带请求。不过先试试上面的方法,大部分302循环问题都是请求头的锅。
内容的提问来源于stack exchange,提问作者RAMAN BHATIA
相关产品推荐
相关产品推荐

