wget引发HTTPError

时间:2018-12-17 13:05:54

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

我有一个很大的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,标头)= ulib.urlretrieve(binurl,tmpfile,回调)文件“ /home/imane/anaconda3/lib/python3.6/urllib/request.py”,行   248,在urlretrieve中       使用contextlib.closing(urlopen(url,data))as fp:文件“ /home/imane/anaconda3/lib/python3.6/urllib/request.py”,第223行,在   网址       返回opener.open(URL,数据,超时)文件“ /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”,第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       返回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,hdr)文件“ /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       引发HTTPError(req.full_url,code,msg,hdrs,fp)urllib.error.HTTPError:HTTP错误403:禁止

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

1 个答案:

答案 0 :(得分:1)

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

如果我正确理解了您的问题,则可以使用简单的try / except-

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