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

如何解决TooManyRedirects: Exceeded 30 redirects错误?附爬虫代码

解决requests爬取roco.cc时的TooManyRedirects错误

错误原因及修复方案

1. 修正请求头键名错误

你的headers字典中User-Agent的键名写错了,正确键名是'User-Agent'(带连字符),服务器可能因识别不到合法UA触发重定向。

修改后的请求头:

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
}

2. 使用Session维持会话

网站可能通过Cookie验证会话,重复创建新请求会导致重复重定向。用requests.Session()维持会话,自动处理Cookie,避免多次重定向触发限制。

修改示例:

# 初始化会话
session = requests.Session()
session.headers.update(headers)

# 爬取列表页
for x in range(1,2):
    url = f'https://www.roco.cc/ren/products/locomotives/steam-locomotives.html?p={x}&verfuegbarkeit_status=41%2C42%2C43%2C45%2C44'
    r = session.get(url)
    soup = BeautifulSoup(r.content, 'lxml')
    productlist = soup.find_all('li', class_='item product product-item')

    for item in productlist:
        for link in item.find_all('a', class_='product-item-link', href=True):
            productlinks.append(link['href'])

# 爬取产品详情页
for link in productlinks:
    # 处理相对路径
    if not link.startswith('http'):
        link = baseurl + link.lstrip('/')
    r = session.get(link)
    # 后续解析代码不变

3. 规范产品链接格式

从页面获取的href可能是相对路径,直接请求会触发重定向到完整路径,多次累积后超出重定向次数限制。需先判断链接是否为绝对路径,非绝对路径则拼接baseurl。

4. 添加语言请求头

roco.cc可能根据请求的语言设置重定向到对应站点,添加Accept-Language头匹配网站语言:

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
    'Accept-Language': 'en-US,en;q=0.9'  # 或使用德语 'de-DE,de;q=0.9'
}

5. 调试重定向链(排查用)

若以上方法无效,可临时关闭重定向,查看服务器的重定向目标,排查循环重定向原因:

r = session.get(url, allow_redirects=False)
print(r.status_code, r.headers.get('Location'))

额外代码优化提示

你的数据字典存在键值倒置问题,比如Manufacturer_name: 'Manufacturer_name'应改为'Manufacturer_name': Manufacturer_name,否则无法正确存储爬取数据:

Locomotives = {
    'Manufacturer_name': Manufacturer_name,
    'Reference': Reference,
    'Price': Price,
    'Type': Type,
    'Scale': Scale,
    'Current': Current,
    'Control': Control,
    'Interface': Interface,
    'Digital_decoder': Digital_decoder,
    'Decoder_Type': Decoder_Type,
    'Motor': Motor,
    'Flywheel': Flywheel,
    'Minimum_radius': Minimum_radius,
    'Length_over_buffer': Length_over_buffer,
    'Number_of_driven_axles': Number_of_driven_axles,
    'Number_of_axles_with_traction_tyres': Number_of_axles_with_traction_tyres,
    'Coupling': Coupling,
    'LED_lighting': LED_lighting,
    'Head_light': Head_light,
    'LED_head_light': LED_head_light,
    'Country': Country,
    'Railway_company': Railway_company,
    'Epoch': Epoch,
    'Description': Description,
} 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:23