使用pd.read_html访问需接受Cookie站点报HTTP 500错误如何解决
问题原因
你遇到的500错误确实是站点新增的Cookie校验规则导致的:当前英格兰银行站点对所有未携带Cookie同意标识的请求,会直接返回服务端错误,原生无参数的pd.read_html()发起的默认请求不带任何自定义头和Cookie,因此会被拦截。
可行方案(完全基于pandas原生能力,无需引入requests/BeautifulSoup)
pd.read_html()本身支持传入urllib.request.Request类型的请求对象作为输入参数,你只需要提前构造带合规Cookie和UA头的请求对象,再传入read_html()即可,仍可复用pandas内置的表格解析逻辑,无需自己处理HTML结构:
import pandas as pd import urllib.request # 构造符合站点要求的请求头,包含Cookie同意标识和常规UA头 headers = { 'Cookie': 'cookies_policy=accepted; cookies_preferences_set=true', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } # 构造请求对象 req = urllib.request.Request( 'https://www.bankofengland.co.uk/boeapps/database/Rates.asp?Travel=NIxIRx&into=GBP', headers=headers ) # 直接传入请求对象到read_html,无需额外解析逻辑 df = pd.read_html(req)[0]
补充说明
目前无法实现仅靠一行无参数的pd.read_html()完成请求,因为站点的访问限制要求必须携带合规的请求头,上述方案已经是和原生read_html使用差异最小、额外依赖最少的实现方式。
内容的提问来源于stack exchange,提问作者David Erickson
相关产品推荐
相关产品推荐

