Python下载BLS CSV文件遇HTTPError 403及多类报错求助
解决pandas 1.0.5读取BLS TSV文件的403及解析错误问题
核心问题分析
- 403 Forbidden:BLS服务器会拦截无浏览器标识的请求,直接用
pd.read_csv访问会被拒绝。 - 适配pandas旧版本:
storage_options参数是pandas 1.3.0新增的,1.0.5不支持,直接套用高版本代码会报错。 - 解析错误:未正确处理请求头时获取到的内容可能是反爬页面(而非真实TSV数据),导致解析字段不匹配。
有效解决方案
用requests模拟浏览器请求获取数据,再传给pandas解析,完美适配1.0.5版本:
import pandas as pd import requests from io import StringIO # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 获取目标数据 url = 'https://download.bls.gov/pub/time.series/cu/cu.item' response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保编码匹配 # 包装文本内容后交给pandas解析TSV df = pd.read_csv(StringIO(response.text), sep='\t', skipinitialspace=True) print(df.head())
对之前报错的解释
- ParserError:未加请求头时获取到的是反爬拦截页面,不是真实的TSV数据,导致解析时字段数量不匹配。
- SyntaxError:大概率是复制代码时出现格式错误(比如引号不匹配、缩进混乱)。
- TypeError: storage_options:pandas 1.0.5确实没有这个参数,必须用
requests中转的方式替代。
内容的提问来源于stack exchange,提问作者Sabrin
相关产品推荐
相关产品推荐

