Estou criando um programa que baixará um arquivo .jar (java) de um servidor da Web, lendo a URL especificada no arquivo .jad do mesmo jogo / aplicativo. Estou usando o Python 3.2.1
Eu consegui extrair a URL do arquivo JAR do arquivo JAD (todo arquivo JAD contém a URL do arquivo JAR), mas como você pode imaginar, o valor extraído é type () string.
Aqui está a função relevante:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request(URL, "GET")
return content
downloadFile(URL_from_file)
No entanto, sempre recebo um erro dizendo que o tipo na função acima deve ser bytes e não string. Eu tentei usar o URL.encode ('utf-8') e também bytes (URL, codificação = 'utf-8'), mas sempre recebia o mesmo erro ou semelhante.
Então, basicamente, minha pergunta é como baixar um arquivo de um servidor quando o URL é armazenado em um tipo de string?
python
python-3.x
Bo Milanovich
fonte
fonte
Respostas:
Se você deseja obter o conteúdo de uma página da web em uma variável, apenas
read
a resposta deurllib.request.urlopen
:A maneira mais fácil de baixar e salvar um arquivo é usar a
urllib.request.urlretrieve
função:Mas lembre-se de que isso
urlretrieve
é considerado legado e pode ficar obsoleto (não sei por que).Portanto, a maneira mais correta de fazer isso seria usar a
urllib.request.urlopen
função para retornar um objeto semelhante a um arquivo que representa uma resposta HTTP e copiá-lo para um arquivo real usandoshutil.copyfileobj
.Se isso parecer muito complicado, convém simplificar e armazenar o download inteiro em um
bytes
objeto e depois gravá-lo em um arquivo. Mas isso funciona bem apenas para arquivos pequenos.É possível extrair
.gz
(e talvez outros formatos) dados compactados em tempo real, mas essa operação provavelmente requer que o servidor HTTP suporte o acesso aleatório ao arquivo.fonte
response.info().get_param('charset', 'utf-8')
em vez de codificarutf-8
, para obter a codificação de caracteres doContent-Type
cabeçalhooutfile.write(data)
funciona apenas para arquivos pequenos?Eu uso o
requests
pacote sempre que quero algo relacionado a solicitações HTTP, porque sua API é muito fácil para começar:primeiro instale
requests
então o código:
fonte
Espero ter entendido a pergunta corretamente, que é: como baixar um arquivo de um servidor quando o URL é armazenado em um tipo de string?
Faço o download de arquivos e os salvo localmente usando o código abaixo:
fonte
Aqui podemos usar a interface Legacy do urllib em Python3:
As seguintes funções e classes são portadas do módulo Python 2 urllib (ao contrário de urllib2). Eles podem ficar obsoletos em algum momento no futuro.
Exemplo (código de 2 linhas) :
fonte
Você pode usar o wget, que é uma popular ferramenta de download de shell para isso. https://pypi.python.org/pypi/wget Este será o método mais simples, pois não precisa abrir o arquivo de destino. Aqui está um exemplo.
fonte
Sim, definitivamente, pedidos é um ótimo pacote para usar em algo relacionado a pedidos HTTP. mas precisamos ter cuidado com o tipo de codificação dos dados recebidos, bem abaixo, é um exemplo que explica a diferença
fonte
Motivação
Às vezes, queremos obter a imagem, mas não precisamos fazer o download para arquivos reais,
ou seja, faça o download dos dados e mantenha-os na memória.
Por exemplo, se eu usar o método de aprendizado de máquina, treine um modelo que possa reconhecer uma imagem com o número (código de barras).
Quando visualizo alguns sites e que têm essas imagens para que eu possa usar o modelo para reconhecê-lo,
e não quero salvar essas fotos na minha unidade de disco,
então você pode tentar o método abaixo para ajudar a manter os dados de download na memória.
Pontos
basicamente, é como @Ranvijay Kumar
Um exemplo
fonte
fonte