`wget` вызывает HTTPError - PullRequest
       30

`wget` вызывает HTTPError

0 голосов
/ 17 декабря 2018

У меня есть большой файл JSON (2,5 ГБ), который содержит ссылки для загрузки некоторых документов.Я написал скрипт на 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, 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, в urlopen возвращает файл opener.open (url, data, timeout)"/home/imane/anaconda3/lib/python3.6/urllib/request.py", строка 532, в открытом ответном файле = meta (req, response) File "/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 result = func (* args) "/ home /Иман /aconda3 / 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, в открытом ответном файле = 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 result = 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 голосов
/ 17 декабря 2018

Похоже, что некоторые URL не могут быть достигнуты -

Вы можете использовать простую попытку /, кроме случаев, если я правильно понимаю вашу проблему -

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