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

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

Ir em baixo  Mensagem [Página 1 de 1]

waghcwb

waghcwb
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!"

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


Não há assuntos pouco interessantes; apenas há pessoas pouco interessadas.
Ver perfil do usuário

JScript

JScript
Membro ativo

Bem avançado!

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

JS



Spoiler:
"O impossível é só uma questão de opinião."


"E o recente formará uma legião. Sua atuação será maior que a atual vezes mil. O estrondor de um milhão de teclados semelhante a um grande terremoto cobrirá a plataforma, e os incrédulos tremerão."

"Alguns seguidores dirão que não é possível, diante de uma legião estarrecida o recente provará o contrário e todos o conhecerão. Os infiéis passarão a lhe adorar diante de uma plataforma que nunca mais será a mesma!"


Do livro de JScript...


Ver perfil do usuário http://jscript.forumeiros.com/

Alex Habilidade

Alex Habilidade
Membro ativo

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

Viva o Python cheers cheers cheers cheers cheers cheers

Ver perfil do usuário

waghcwb

waghcwb
Membro elite

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.



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

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


Não há assuntos pouco interessantes; apenas há pessoas pouco interessadas.
Ver perfil do usuário

Conteúdo patrocinado


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