Você não está conectado. Conecte-se ou registre-se

[Dica] Baixando múltiplos arquivos de um folder no Google Drive

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

waghcwb

avatar
Membro elite

Dica para usuários unix ou usuários que tenham o Python instalado na máquina



Como eu baixei 400 arquivos de um folder no Google Drive.

Salve salve pessoal, vou deixar o passo a passo de como fiz para baixar mais de 400 arquivos de um folder no Google Drive, talvez alguém precise disso no futuro.

O caso:

Infelizmente eu sou um acumulador de arquivos e links, tenho coleções de PDF's, códigos, links, livros, que qualquer outra pessoa que mexa na minha máquina se sentiria na Biblioteca de Alexandria scratch

A questão é, que sempre que posso compartilho meus arquivos com amigos, e quando eles também tem links, sempre me mandam, uma mão lava a outra.

Em uma conversa com um desses amigos consegui um link para um folder do Google Drive com mais de 400 links para baixar! Convenhamos que clicar em 400 links não é algo interessante e produtivo de se fazer, não acham?

Pensando nisso, parei para analisar como poderia fazer isso de maneira mais fácil. Foi ai que eu me lembrei porque é que eu amo o Linux!!

Um dos (milhares) de motivos, é que existe uma funçãozinha no terminal, chamada wget, que me permite baixar arquivos diretamente do terminal, o mais legal é que se você tiver um arquivo com centenas de links (separados por uma quebra de linha) você pode baixar todos esses arquivos automaticamente, sem qualquer esforço.


O problema:

Mas a questão é: Como conseguir 400 links para colocar no arquivo? Copiar um por um seria tão intediante quanto baixar um a um. Foi ai que parei para fazer uma pequena analise no código deles, e encontrei um objeto (javascript) bem interessante, com o nome "data"

Esse objeto tem 3 items bem interessantes, porém o único que nos importa é o "folderModel", que além de outras informações, contém todos os links do folder que estamos visualizando, inclusive o link para download individual de cada arquivo.

Sendo assim, só preciso pegar esses links, foi ai que criei o seguinte loop:

Código:
var items = data.folderModel, i = (items.length - 1);

for(i; i >= 0; i--) {
 document.write(items[i][3] + '<br>');
}

Ele é bem simples, tudo que faz é substituir todo o conteúdo do documento atual com os links que foram pegos do objeto "data".


A solução:

É ai que entra a mágica do Linux, com uma simples linha no terminal fazemos o trabalho todo de uma vez só
Código:
wget –no-check-certificate -i livros.txt

Leia mais: http://www.gnu.org/software/wget/manual/html_node/HTTPS-_0028SSL_002fTLS_0029-Options.html

Pronto, agora podemos ir dar uma volta na quadra enquanto os arquivos são baixados.

Quando esse processo terminar, vamos ter outro problema, os arquivos não são baixados com a extensão .pdf, e ai entra mais um dos motivos por eu amar o Linux; Ele já vem com o Python "de fabrica", ou seja, basta usufruirmos de todo o poder dessa linguagem, sem instalações adicionais.

Criei o seguinte código
Código:
import os

for file in os.listdir('.'):
 pdf = file + ".pdf"
 print "Arquivo renomeado -", pdf
 os.rename(file, pdf)

Em um arquivo com o nome rename.py e rodei no terminal com "python rename.py"

E como num passe de mágica, tenho todos os arquivos com a extensão correta, simples e fácil não é?

Para vocês que não tem o Linux e também tem esse problema, aqui a solução (clique)

Brincadeira, para que eu possa te ajudar, no minimo você precisa ter o Python instalado na sua máquina!

Acredito que isso já resolva

Código:
import requests

with open('livros.txt', 'r') as links:
 download = links.readlines()

i = 1

for link in download:

 link = link.rstrip('\n')

 print 'Baixando: Arquivo - %s.pdf' % i
 r = requests.get(link)

 with open('Arquivo - %s.pdf' % i, 'wb') as newfile:
 print 'Criando: Arquivo - %s.pdf\n\n' % i
 newfile.write(r.content)
 i += 1

E ai um dos motivos por eu adorar Python também!!

É isso ai galera, espero que seja útil. Façam bom proveito.



Última edição por waghcwb em Ter Fev 17, 2015 5:46 pm, editado 2 vez(es)



"May the force be with you, young grasshopper!"




Não há assuntos pouco interessantes; apenas há pessoas pouco interessadas.
Ver perfil do usuário
Compartilhar este artigo em: BookmarksDiggRedditDel.icio.usGoogleLiveSlashdotNetscapeTechnoratiStumbleUponNewsvineFurlYahoo!Smarking

Bem avançado!

Não testei pois o cenário ainda não é "real" pra mim que não uso o GNU-Linux...

JS

hehehe Muito bom Wagh, testei aqui no meu Linux e deu certo...

Viva o Python cheers cheers cheers cheers cheers cheers

Galera, tive um problema quando baixei alguns arquivos, eles vieram nomeados de acordo com sua URL e não com o nome do .pdf; Para resolver o problema usei o código abaixo depois de baixar os arquivos:

Código:
#!python
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument

import os

def get_title(pdf_path):
    infile = open(pdf_path, 'rb')
    parser = PDFParser(infile)
    document = PDFDocument(parser)

    return document.info[0]['Title']

for file in os.listdir('.'):
   if os.path.splitext(file)[1] == '.pdf':
      try:
         title = get_title(file)

         if title != ' ':
            os.rename(file, '%s.pdf' % title)
            print 'Arquivo renomeado: %s.pdf' % title
         else:
            print '\nString invalida'
      except Exception as message:
          print "Erro: ", message
          pass

É necessária a instalação da livraria pdfminer (http://www.unixuser.org/~euske/python/pdfminer), o código abre o .pdf, lê as informações contidas nele, buscando pelo título do PDF, e então renomeia o arquivo.. Caso não tenha um título, ele não faz nada, só te mostra o erro.

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum