Se você não tem nada a ver com programação, nem tem interesse no assunto, simplesmente ignore este artigo.
Mike Driscoll tem um blog dedicado a Python chamado The Mouse vs. the Python e eventualmente há excelentes artigos por lá.
Esta é uma tradução livre do artigo Python 101: How to Download a File e modifiquei sutilmente algumas coisas, incluindo os exemplos.
Baixar arquivos da internet é o tipo de coisa que a maioria dos programadores, mais cedo ou mais tarde, vai terminar tendo que fazer. Python oferece várias formas de fazer exatamente isso, usando a biblioteca padrão. Provavelmente a forma mais popular de baixar um arquivo é sobre HTTP, usando o módulo urllib ou urllib2. Python também vem com ftplib para downloads via FTP. Para concluir, há um módulo de terceiros chamado requests que tem causando alvoroço (e está disponível no repositório padrão do Trisquel - e do Ubuntu - no pacote python-requests). Neste artigo, focaremos os módulos urllib e request.
Uma vez que se trata de uma tarefa bastante simples, mostraremos apenas um script rápido e sapecado, que baixa o mesmo arquivo com cada um dos módulos e nomeia o resultado de maneira levemente diferente. Baixaremos um arquivo PDF do cordel Fantasma d Opera, daqui do Bardo WS mesmo, para usar no nosso exemplo. Vamos dar uma sacada
# Python 2 code import urllib import urllib2 import requests url = 'http://www.carlissongaldino.com.br/modules/pubdlcnt/pubdlcnt.php?file=http://www.carlissongaldino.com.br/sites/default/files/o-fantasma-da-opera.pdf&nid=1287' print "baixando com urllib" urllib.urlretrieve(url, "o-fantasma-da-opera-u.pdf") print "baixando com urllib2" f = urllib2.urlopen(url) data = f.read() with open("o-fantasma-da-opera-u2.pdf", "wb") as code: code.write(data) print "baixando com requests" r = requests.get(url) with open("o-fantasma-da-opera-r.pdf", "wb") as code: code.write(r.content)
Como você pode ver, urllib precisa de apenas uma linha. Essa simplicidade o torna muito fácil de usar. Por outro lado, as outras duas bibliotecas também são muito simples. Para urllib2, você precisa apenas abrir a url, lê-la e escrever seus dados. Na verdade, você pode siplificar ainda mais esse script - em uma linha - fazendo o seguinte:
f = urllib2.urlopen(url) with open("o-fantasma-da-opera-u2.pdf", "wb") as code: code.write(f.read())
De um jeito ou de outro, o código funciona muito bem. O método para o módulo requests é get, que corresponde ao HTTP GET. Você então pega o objeto requests e chama a propriedade content para escrever os dados onde você quiser. Nós optamos pelo statement with por ele fechar automaticamente o arquivo e simplificar o código. Note que usando siplesmente o "read()" pode ser perigoso, se o arquivo for muito grande. É melhor lê-lo aos poucos, passando um tamanho ao read.
Atualizado (8 de junho de 1012)
Como apontado por um dos leitores do The Mouse vs. The Python, o uso da urllib muda consideravelmente quando a utilizamos através do 2to3.py, no formato do Python 3. Assim, para complementar, aqui está como o código se parece:
# Python 3 code import urllib.request, urllib.parse, urllib.error url = 'http://www.carlissongaldino.com.br/modules/pubdlcnt/pubdlcnt.php?file=http://www.carlissongaldino.com.br/sites/default/files/o-fantasma-da-opera.pdf&nid=1287' print("baixando com urllib") urllib.request.urlretrieve(url, "o-fantasma-da-opera-u.pdf") print("baixando com urllib2") f = urllib.request.urlopen(url) data = f.read() with open("o-fantasma-da-opera-u2.pdf", "wb") as code: code.write(data)
Você nottará que urllib2 não existe mais e que urllib.urlretrieve e urllib2.urlopen mudou para urllib.request.urlretrieve e urllib.request.urlopen, respectivamente. O resto continua o mesmo, de modo que eu removi as outras partes.
Então está feito! Agora você pode baixar arquivos programando em Python 2 ou 3!
P. S.: Imagem do post: Python vert / Morelia Viridis, de raym5
Comentários
Obrigado me ajudou muito
Obrigado me ajudou muito
Fico feliz que tenha sido
Fico feliz que tenha sido útil! :-) Nunca mais traduzi nada do mouse X python. Se seu inglês der conta, recomendo que passeie por lá porque tem muita coisa boa.
[]s
Arquivo com falha
Olá
Obrigado!
Este site tem vários links que abrem PDFs, nos locais de "Inteiro teor": http://www.camara.gov.br/proposicoesWeb/prop_emendas?idProposicao=212207...
Em Python 3 eu escrevi esse código para tentar fazer o download de um link:
import urllib.request, urllib.parse, urllib.error
url = "http://www.camara.gov.br/proposicoesWeb/prop_emendas?idProposicao=212207..."
urllib.request.urlretrieve(url, "EMC 1-2017 PL678716 =- PL 6787-2016.pdf")
Baixou um arquivo PDF, mas não abre no Acrobat: não pôde abrir o arquivo porque não há suporte a esse tipo de arquivo ou ele foi danificado
Por favor, sabe como fazer o download correto?
Abraços
Reinaldo Chaves
Você separou o endereço do
Você separou o endereço do pdf do restante da URL. A URL tem que estar completa, apontando para o link do PDF. O segundo parâmetro de urlretrieve é o nome que você pretende dar localmente ao arquivo.
Acredito que tenha sido só isso o problema. :-)
Muito Bom
Olá, gostei muito do post, consegui fazer alguns poucos ajustes e fazer os dowloads que eu queria. Muito obrigado, foi de grande ajuda. =D
Olá, parabéns pelo post, me
Olá, parabéns pelo post, me ajudou muito no trabalho.
Estou com outro problema, será que poderia me ajudar?
Como eu faço para fazer download de um arquivo que o site pede para digitar um captcha antes de liberar o download?
quero baixar um arquivo de um cadastro no CAR: http://www.car.gov.br/publico/municipios/downloads
Salve! Cara, realmente não
Salve! Cara, realmente não faço ideia. Mesmo porque a ideia de um captcha é justamente evitar que programas acessem conteúdos que era pra serem acessados apenas por humanos...
Direto e reto
Obrigado, man!
Matou meu problema de forma rápida e objetiva!
Muitos parabéns pelo artigo!
Muitos parabéns pelo artigo! Está muito bom!
Gostaria de lhe perguntar.
Como fazer downloads de ficheiros PDFs quando o link de uma página muda quando se entra na página do link?
Explicando melhor:
O link para o PDF é este: https://academic.oup.com/carcin/article-pdf/18/11/2035/19256872/182035.pdf
mas quando se entra nesse link, ele é alterado para este:
https://watermark.silverchair.com/182035.pdf?token=AQECAHi208BE49Ooan9kkhW_Ercy7Dm3ZL_9Cf3qfKAc485ysgAAAmYwggJiBgkqhkiG9w0BBwagggJTMIICTwIBADCCAkgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMknLOBAlmKh4CSHplAgEQgIICGf0J90rul77N226b-ze9QGEBmtccF6jKG7SgvEctNn0xItU4hrRnFpRAoLM8Dm0B38y4ifbGaa66PJ7FXdG0Jn5njawexreb2WtPLvwBEoXnP6nzu7y7y_bOergK82ZYQ6WCPK36NgwXC89aV8F4pZLs94H1imLjrQUs6ruUXcfOJgM6VhvxBN9HiNCkve1r8JkWrb4W8tBgplMQwshS6C7_QGsJq-3Qfy5u24nW93Ds-UnpOcILcFBTxT9gyX40BVRqEL1xiVxzQEZdxq_A2z02a6Vk1hv9lNfW1bXlFVEMpB7DLbnV-HDKXhreNXykRMWMRErMHl0A5AIAmytuMoMywcX3EyB-dPt1EvwXBOhEUdE8TRuOqgCc0GDGwn9NVmr79MGSgavACAGNPGWK9Gs6v621enmhx3GqqCGeIG4B__Cvo-zZQqeSTVPxwaGdJWKlHyw6d258kBqXoqMMGNCCN8rKbu0u5HYg5JvqEHb6JgwArvtZdu-73nKoFy-aYfPNhjZXUlNKy9E77yVzkgcQKQT95OlexiC1lnldlo9VYfHpfh4hcVcW2jlii_4xBkeMCrTtSglCUN7KCkVRQGD7w38TSbrbZ4xMjEgPb1V8naolghYbPwSmPk0vG-hw5n5VzsFOcO9cm3hBLcYp2UIdGyHoH729O8Wk_ZEwtIz7swGoPRZ-4-fUu38hnB954Va42IhxKNxh5A
Como o nosso programa python pode fazer downloads quando aparece esse problema?
baixa de xml
Ola, preciso da ajuda do amigo.
Sou contador e curioso nessa área de programação e gostaria de entender melhor como faço procedimento parecido para baixar uma sequencia de xmls (por periodo) e (por empresa) de um site emisspor de nota fiscal eletronica de serviços. lembrando que o site exige login e senha uma unica vez, sem capcha.
muito obigado e parabens pela iniciativa
abraço
Download - arquivo incompleto
Prezados,
Estou implementando um download do arquivo portal da transparência, porém o arquivo possui aprox. 1GB.
Quando mando fazer o download ele dá status 200, e informa que fez o download do arquivo, porém baixa apenas 178kb.
Saberia me informar o motivo?
Abraço
Comentar