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 查询?