【问题标题】:`wget` raises a HTTPError`wget` 引发 HTTPError
【发布时间】:2019-05-17 20:36:10
【问题描述】:

我有一个大的 json 文件 (2.5GB),其中包含一些文件的下载链接。我写了一个python脚本来下载所有这些文件:

with open("arxiv_2010_to_2016.json") as  f:
    X = json.load(f)

for article_id in X:
        link = X[article_id]["link"] + ".pdf"
        wget.download(link, out="docs")

json 文件中有数千个这样的文档引用。成功下载1204个文档后,脚本崩溃了HTTPError

文件“/home/imane/anaconda3/lib/python3.6/site-packages/wget.py”,行 526,正在下载 (tmpfile, headers) = ulib.urlretrieve(binurl, tmpfile, callback) 文件 "/home/imane/anaconda3/lib/python3.6/urllib/request.py", 行 248,在 urlretrieve 中 使用 contextlib.closing(urlopen(url, data)) 作为 fp:文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 223 行,在 网址打开 返回 opener.open(url, data, timeout) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 532 行,在 打开 response = meth(req, response) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 642 行,在 http_response 'http'、请求、响应、代码、味精、hdrs)文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 564 行,在 错误 结果 = self._call_chain(*args) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 504 行,在 _call_chain 结果 = func(*args) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 756 行,在 http_error_302 return self.parent.open(new, timeout=req.timeout) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 532 行,在 打开 response = meth(req, response) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 642 行,在 http_response 'http'、请求、响应、代码、msg、hdrs)文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 570 行,在 错误 返回 self._call_chain(*args) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 504 行,在 _call_chain 结果 = func(*args) 文件“/home/imane/anaconda3/lib/python3.6/urllib/request.py”,第 650 行,在 http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden

如何在不崩溃的情况下运行脚本并下载所有文档? 我正在运行 Fedora 28、python 3.6.6、wget 3.2

【问题讨论】:

  • 似乎是服务器错误,服务器正在禁止请求。也许每个 IP 可以下载的文件数量有限制。或者您无法下载该文件,因为它受到保护。您可以尝试捕获异常并继续处理其他异常。如果在此之后所有文件都失败了,您知道有一个限制,您需要联系他们或使用 VPN 每 x 个文件更改您的 IP。
  • 好吧,http请求可能会引发异常..你需要抑制它

标签: python-3.x wget urllib http-error


【解决方案1】:

看起来有些网址无法访问 -

您可以使用简单的尝试/除非我正确理解您的问题 -

for article_id in X:
    link = X[article_id]["link"] + ".pdf"
    try:
        wget.download(link, out="docs")
    except HTTPError:
        continue

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2023-01-20
    • 2017-12-10
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多