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

使用wget下载英国新冠CSV数据遇HTTP 308错误,求解决方案

解决wget下载英国新冠疫情数据时的HTTP 308永久重定向错误

问题描述

我是Python新手,正在进行英国CV-19疫情爆发建模工作,目前编写程序自动下载英国政府最新死亡统计数据。现有代码如下:

import wget
url = "https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv"
# wget.download(url, 'C:/Users/Moshe/Downloads/Covid_19_uk_timeseries.csv')

在PyCharm中运行该代码时,出现如下报错信息:

C:\Users\Moshe\PycharmProjects\HelloWorld\venv\Scripts\python.exe C:/Users/Moshe/.PyCharmCE2019.1/config/scratches/Get_CV19_UK_stats.py
Traceback (most recent call last):
  File "C:/Users/Moshe/.PyCharmCE2019.1/config/scratches/Get_CV19_UK_stats.py", line 6, in <module>
    wget.download(url, 'C:/Users/Moshe/Downloads/Covid_19_uk_timeseries.csv')
  File "C:\Users\Moshe\PycharmProjects\HelloWorld\venv\lib\site-packages\wget.py", line 526, in download
    (tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 247, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 641, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 503, in _call_chain
    result = func(*args)
  File "C:\Users\Moshe\AppData\Local\Programs\Python\Python37\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 308: Permanent Redirect
Process finished with exit code 1

目标文件可在英国政府新冠数据页面获取。请问该代码为何无法运行?需要如何修改?


问题原因

HTTP Error 308: Permanent Redirect 表示你请求的URL已经被永久迁移到了新地址,而你使用的wget库的download方法默认不会自动跟随这类重定向;另外注意,你代码里的URL指向的是病例数据CSV,但你提到要下载的是死亡统计数据,这也是一个需要修正的小偏差。

解决方案

方案1:使用requests库(推荐,自动处理重定向)

requests是Python中更易用的HTTP请求库,默认会自动跟随所有3xx系列的重定向,代码实现更简洁:

首先确保你已经安装了requests:

pip install requests

然后替换代码为:

import requests

# 替换为官方提供的死亡统计数据CSV URL(可从数据页面获取最新链接)
url = "https://coronavirus.data.gov.uk/downloads/csv/coronavirus-deaths_latest.csv"
save_path = 'C:/Users/Moshe/Downloads/Covid_19_uk_deaths_timeseries.csv'

# 发送请求并允许自动重定向
response = requests.get(url, allow_redirects=True)
# 将下载内容写入本地文件
with open(save_path, 'wb') as file:
    file.write(response.content)

print("死亡统计数据下载完成!")

方案2:继续使用wget,手动处理重定向

如果你坚持要用wget,可以先通过urllib获取重定向后的真实URL,再用wget下载:

import wget
import urllib.request

original_url = "https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv"

# 获取重定向后的真实下载链接
with urllib.request.urlopen(original_url) as response:
    real_download_url = response.geturl()

# 使用真实URL执行下载
wget.download(real_download_url, 'C:/Users/Moshe/Downloads/Covid_19_uk_timeseries.csv')

额外提示

  • 英国政府的新冠数据CSV链接可能会不定期更新,建议定期从官方数据页面确认最新的下载链接,避免再次出现URL失效的问题。
  • 确认你要下载的是死亡数据还是病例数据,不要混淆对应的URL,官方页面里会分别提供不同数据的下载入口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:03:00