Я создаю программу, которая загружает файл .jar (java) с веб-сервера, считывая URL-адрес, указанный в файле .jad той же игры / приложения. Я использую Python 3.2.1
Мне удалось извлечь URL-адрес файла JAR из файла JAD (каждый файл JAD содержит URL-адрес файла JAR), но, как вы можете себе представить, извлеченное значение является строкой type ().
Вот соответствующая функция:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request(URL, "GET")
return content
downloadFile(URL_from_file)
Однако я всегда получаю сообщение о том, что тип в функции выше должен быть байтами, а не строкой. Я пытался использовать URL.encode ('utf-8'), а также байты (URL, encoding = 'utf-8'), но я всегда получал ту же или похожую ошибку.
Таким образом, в основном мой вопрос заключается в том, как загрузить файл с сервера, когда URL-адрес хранится в виде строки?
python
python-3.x
Бо Миланович
источник
источник
Ответы:
Если вы хотите получить содержимое веб-страницы в переменную, просто
read
ответurllib.request.urlopen
:Самый простой способ загрузить и сохранить файл - это использовать
urllib.request.urlretrieve
функцию:Но имейте в виду, что
urlretrieve
это считается наследием и может устареть (хотя и не знаю почему).Таким образом, самый правильный способ сделать это - использовать
urllib.request.urlopen
функцию для возврата файла-подобного объекта, который представляет HTTP-ответ, и скопировать его в реальный файл, используяshutil.copyfileobj
.Если это кажется слишком сложным, вы можете пойти проще и сохранить всю загрузку в
bytes
объекте, а затем записать его в файл. Но это хорошо работает только для небольших файлов.Можно извлекать
.gz
(и, возможно, другие форматы) сжатые данные на лету, но такая операция, вероятно, требует, чтобы HTTP-сервер поддерживал произвольный доступ к файлу.источник
response.info().get_param('charset', 'utf-8')
вместо жесткогоutf-8
кодирования, чтобы получить кодировку символов изContent-Type
заголовкаoutfile.write(data)
хорошо работает только для небольших файлов?я использую
requests
пакет всякий раз, когда хочу что-то связанное с HTTP-запросами, потому что его API очень легко начать с:во-первых, установить
requests
тогда код:
источник
Надеюсь, я правильно понял вопрос: как загрузить файл с сервера, когда URL-адрес хранится в строковом типе?
Я загружаю файлы и сохраняю их локально, используя следующий код:
источник
Здесь мы можем использовать устаревший интерфейс urllib в Python3:
Следующие функции и классы портированы из urllib модуля Python 2 (в отличие от urllib2). Они могут устареть в какой-то момент в будущем.
Пример (2 строки кода) :
источник
Вы можете использовать wget, который является популярным инструментом для загрузки оболочки. https://pypi.python.org/pypi/wget Это будет самый простой метод, так как ему не нужно открывать файл назначения. Вот пример.
источник
Да, безусловно, запросы - это отличный пакет для использования с чем-то, связанным с HTTP-запросами. но мы должны быть осторожны с типом кодирования входящих данных, а ниже приведен пример, который объясняет разницу
источник
мотивация
Иногда мы хотим получить изображение, но не нужно загружать его в реальные файлы,
т.е., загрузить данные и сохранить его в памяти.
Например, если я использую метод машинного обучения, обучите модель, которая может распознавать изображение с номером (штрих-код).
Когда я делаю пауки на некоторых сайтах, на которых есть эти изображения, я могу использовать модель для ее распознавания,
и я не хочу сохранять эти картинки на моем диске,
тогда вы можете попробовать метод ниже, чтобы помочь вам сохранить данные загрузки в памяти.
Точки
в основном, как @Ranvijay Кумар
Пример
источник
источник