Ver Feed RSS

root@blog:/# chmod o+r *

Python: Criando listas de download

Avalie este Post de Blog
Quando comecei a brincar com Python, me empolguei e logo fui mexer com PyGTK. A primeira aplicação que desenvolvi com Python (e PyGTK) foi um gerenciador de animes. Ele era bem básico:

  1. Listava os animes que eu tinha (catálogo);
  2. Controlava quantos faltavam pra baixar;
  3. Armazenava uma lista de links pra download;
  4. e controlava quais episódios de cada anime eu já tinha assistido

Um dos principais motivos de ter criado ele era para evitar ficar com uma aba do Firefox aberta no site que disponibilizava o anime. Então criei esse aplicativo, com o AllTray ele ficava oculto e quando eu precisava eu só clicava no anime e ele abria o próximo episódio pra baixar.

Só que uma coisa que me enchia o saco era alimentar a lista de downloads. Na época eu fazia na mão... Esses dias comecei a baixar Samurai X pro meu irmão mais novo. Como são 95 episódios eu resolvi automatizar o processo. Como nesse site todos os links eram do rapidshare foi mais fácil. Usei o seguinte script:

Código :
[FONT=Courier New][COLOR=DimGray]import urllib
import re
from BeautifulSoup import BeautifulSoup
 
page = urllib.urlopen(\"http://animemundobr.blogspot.com/2007/11/samurai-x-dublado.html\")
soup = BeautifulSoup(page)
links = soup.findAll(\"a\",href=re.compile(\"http://rapidshare.com/*\"))
lista = [link.contents[0]+\"\n\" for link in links]
f = open(\"samurai_x_links.txt\",\"w\")
f.writelines(lista)
f.close()[/COLOR][/FONT]

Esse script, basicamente, abra a página, acha todas as referências começadas com http://rapidshare.com/... e joga tudo em um arquivo. Assim eu importo pro meu "gerenciador" e ta tudo resolvido

Uma parte da saída:
Código :
http://rapidshare.com/files/6231583/Samurai_X_EP1.rmvb
http://rapidshare.com/files/6232218/Samurai_X_EP2.rmvb
http://rapidshare.com/files/6231582/Samurai_X_EP3.rmvb
...

Isso é muito útil pra quando podemos fazer download direto. Podemos incrementar o script pra usar um wget e pronto!

Até mais...

Atualizado 11-01-2010 em 12:38 por Magnun

Categorias
internet , Dicas , Python , Dicas

Comentários

  1. Avatar de jayson
    Olá magnum, parabéns pelo código, muito bom para quem está aprendendo usar a BeautifulSoup, mas há um erro no seu código, você está importando a urllib2 e usando a urllib.
    O que acha do código assim ? Acho que fica menos confuso do que o loop que você usou.

    import urllib2
    import re
    from BeautifulSoup import BeautifulSoup

    page = urllib2.urlopen("http://animemundobr.blogspot.com/2007/11/samurai-x-dublado.html")
    soup = BeautifulSoup(page)
    links = soup.findAll("a",href=re.compile("http://rapidshare.com/"))
    lista = []
    for link in links:
    href = link.get('href', None)
    if href:
    lista.append(href)
    f = open("samurai_x_links.txt","w")
    f.write('\n'.join(lista))
    f.close()

    Abraço
    Jayson
  2. Avatar de jayson
    Segue o link da versão formatada.
    Python pastebin - collaborative debugging tool
  3. Avatar de Magnun
    Realmente foi um deslize... Quando estava passando o código pra cá dei uma "enxugada" e esqueci do alterar o import. Eu estava fazendo o teste com os 2 urllib pra ver se havia alguma diferença

    Quanto ao loop, na verdade não é um loop! É list comprehension! Tá... é um "loop diferente" Mas em Python agente chama de list comprehension... Acho essa feature do Python muito boa! Organiza o código e torna ele mais legível! Mas gostei do seu '\n'.join(). Ficou mais legal!

    Quanto a resumir ainda podemos fazer assim:


    from urllib import urlopen as url
    from re import compile as regex
    from BeautifulSoup import BeautifulSoup as BS

    f = open("samurai_x_links.txt","w")
    f.write('\n'.join(
    [link.contents[0] for link in (BS(url("http://animemundobr.blogspot.com/2007/11/samurai-x-dublado.html"))).findAll("a",href=regex("http://rapidshare.com/*"))]))
    f.close()



    Pronto, tirando os imports, 3 linhas de código! Tudo bem que ficou feio... Por isso prefiro assim:


    import urllib
    import re
    from BeautifulSoup import BeautifulSoup

    page =
    urllib.urlopen("http://animemundobr.blogspot.com/2007/11/samurai-x-dublado.html")
    soup =
    BeautifulSoup(page)
    links = soup.findAll("a",href=re.compile("http://rapidshare.com/*"))
    lista = [link.contents[0] for link in links]
    f = open("samurai_x_links.txt","w")
    f.write('\n'.join(lista))
    f.close()


    Como os Pythonistas dizem é mais Pythoniano!

    Obrigado pelo comentário!!
    Até mais...

+ Enviar Comentário