Python Pandas 处理 308 请求

Posted

技术标签:

【中文标题】Python Pandas 处理 308 请求【英文标题】:Python Pandas handling of 308 request 【发布时间】:2020-08-08 10:09:27 【问题描述】:

在尝试将英格兰的 Covid_19 数据读入 pandas 时,我尝试使用 PHE https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv 提供的 URL,但是,此文件需要 http 308 重定向。我尝试了优雅的解决方案:

import pandas as pd
tabel = pd.read_csv('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv')

导致错误HTTPError: HTTP Error 308: Permanent Redirect

但是,URL 的作用是

import pandas as pd
import requests
import io
datastr = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv',allow_redirects=True).text
data_file = io.StringIO(datastr)
table = pd.read_csv(data_file)

给出想要的结果。

我想要类似于第一个解决方案的东西,这是熊猫的问题还是我做错了什么?

【问题讨论】:

【参考方案1】:

查看 Pandas 源代码,它使用 urllib.request.urlopen() 并且文档建议它应该遵循有意义的重定向。

但是,308 不是根据https://www.rfc-editor.org/rfc/rfc7231 定义的重定向代码,因此 urllib 会抛出异常,因为它不知道该怎么做。 requests 库更宽容一些。

响应说“永久重定向”,但看看狡猾的托管,我怀疑这真的是什么意思。

我认为出版商搞砸了,所以除了你的解决方法之外,我不会花太多时间。

请注意,请求确实可以让您获得可以传递给 pd.read_csv() 的原始流:

r = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv', stream=True)
pd.read_csv(r.raw)

【讨论】:

308 是由 RDF 7538: The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) 定义的。 另外,请参阅:bugs.python.org/issue40321: urllib.request does not support HTTP response status code 308

以上是关于Python Pandas 处理 308 请求的主要内容,如果未能解决你的问题,请参考以下文章

python pandas - 处理嵌套 groupby 的最佳方法

使用 Pandas 在 Python 中处理大型 SQL 查询?

Py修行路 Pandas 模块基本用法

python py__pandas.py

Python自动化办公--Pandas玩转Excel数据分析

python--Pandas