Я пытаюсь загрузить файл PDF с веб-сайта и сохранить его на диск. Мои попытки либо терпят неудачу с ошибками кодирования, либо приводят к пустым PDF-файлам.
In [1]: import requests
In [2]: url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf'
In [3]: response = requests.get(url)
In [4]: with open('/tmp/metadata.pdf', 'wb') as f:
...: f.write(response.text)
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-4-4be915a4f032> in <module>()
1 with open('/tmp/metadata.pdf', 'wb') as f:
----> 2 f.write(response.text)
3
UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-14: ordinal not in range(128)
In [5]: import codecs
In [6]: with codecs.open('/tmp/metadata.pdf', 'wb', encoding='utf8') as f:
...: f.write(response.text)
...:
Я знаю, что это какая-то проблема с кодеком, но я не могу заставить ее работать.
В Python 3 я считаю, что pathlib - самый простой способ сделать это. Response.content запроса прекрасно сочетается с write_bytes pathlib.
from pathlib import Path import requests filename = Path('metadata.pdf') url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf' response = requests.get(url) filename.write_bytes(response.content)
источник
544
и файл битый, есть идеи?Вы можете использовать urllib:
import urllib.request urllib.request.urlretrieve(url, "filename.pdf")
источник
urlretrieve
полагается на глобальные настройки для определения заголовков запросов, что делает его непригодным для некоторых случаев использования.Как правило, это должно работать в Python3:
import urllib.request .. urllib.request.get(url)
Помните, что urllib и urllib2 не работают должным образом после Python2.
Если в каких-то загадочных случаях запросы не работают (случилось со мной), вы также можете попробовать использовать
Связанный:
Вот достойное объяснение / решение для поиска и загрузки всех файлов pdf на веб-странице:
https://medium.com/@dementorwriter/notesdownloader-use-web-scraping-to-download-all-pdfs-with-python-511ea9f55e48
источник
Обратите внимание, я новичок. Если мое решение неверно, пожалуйста, исправьте и / или дайте мне знать. Я тоже могу узнать что-то новое.
Мое решение:
Измените downloadPath в соответствии с тем, где вы хотите сохранить файл. Не стесняйтесь использовать абсолютный путь для вашего использования.
Сохраните ниже как downloadFile.py.
Применение:
python downloadFile.py url-of-the-file-to-download new-file-name.extension
Не забудьте добавить расширение!
Пример использования:
python downloadFile.py http://www.google.co.uk google.html
import requests import sys import os def downloadFile(url, fileName): with open(fileName, "wb") as file: response = requests.get(url) file.write(response.content) scriptPath = sys.path[0] downloadPath = os.path.join(scriptPath, '../Downloads/') url = sys.argv[1] fileName = sys.argv[2] print('path of the script: ' + scriptPath) print('downloading file to: ' + downloadPath) downloadFile(url, downloadPath + fileName) print('file downloaded...') print('exiting program...')
источник
tmp
Что касается ответа Кевина, который нужно написать в папке , он должен быть таким:with open('./tmp/metadata.pdf', 'wb') as f: f.write(response.content)
он забыл
.
перед адресом и, конечно, ваша папкаtmp
должна была быть уже созданаисточник
tmp
, это было как в вопросе OP. 2-/tmp
каталог - это tmp в системах Unix, расположенный по адресу/tmp
, no.