Как загрузить файл из Интернета в Python 3 с URL-адресом, сохраненным в строке
При попытке загрузить файл с веб-сервере на Python 3, передача строки в качестве URL-адреса может привести к ошибке, требующей ввода байтов. В этой статье представлено несколько способов обойти эту проблему и успешно получить файл.
Использование urllib.request.urlopen
Чтобы получить содержимое веб-страницы, используйте urllib .request.urlopen(). Эта функция возвращает объект ответа, который затем можно считать в переменную:
import urllib.request
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
Использование urlib.request.urlretrieve
Самый простой способ загрузить и сохранить файл — использовать функция urllib.request.urlget:
import urllib.request
url = 'http://example.com/file.txt'
urllib.request.urlretrieve(url, 'file.txt')
Этот метод загружает файл с указанного URL-адреса и сохраняет его локально как 'file.txt'.
Использование urlib.request.urlopen с помощью Shutil.copyfileobj
Для большего контроля над В процессе загрузки используйте urllib.request.urlopen() для возврата файлового объекта. Затем этот объект можно скопировать в реальный файл с помощью Shutil.copyfileobj():
import urllib.request
import shutil
url = 'http://example.com/file.zip'
with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file:
shutil.copyfileobj(response, out_file)
Сохранение загрузки в виде байтов
Если скорость является приоритетом, загруженные данные могут быть сохранены непосредственно в объекте bytes и впоследствии записывается в файл, хотя это подходит только для небольших файлов:
import urllib.request
url = 'http://example.com/icon.png'
with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file:
data = response.read() # a `bytes` object
out_file.write(data)
Обработка сжатых файлов
urllib.request.urlopen() также можно использовать для обработки сжатых файлов, при условии, что сервер поддерживает произвольный доступ:
import urllib.request
import gzip
url = 'http://example.com/archive.gz'
with urllib.request.urlopen(url) as response:
with gzip.GzipFile(fileobj=response) as uncompressed:
file_header = uncompressed.read(64) # a `bytes` object
Реализуя один из этих методов, разработчики могут успешно загружать файлы из Интернета в Python 3, даже если URL-адрес хранится в виде строки.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3