我有一个很大的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
答案 0 :(得分:1)
看起来无法访问某些网址-
如果我正确理解了您的问题,则可以使用简单的try / except-
for article_id in X:
link = X[article_id]["link"] + ".pdf"
try:
wget.download(link, out="docs")
except HTTPError:
continue