enero 09, 2010 Archives

sáb ene 9 19:41:51 CET 2010

Tucan y BeautifulSoup

Supongo que todos conoceis sitios como RapidShare o Megaupload, y el procedimiento estándar para descargarte un fichero: captcha, enlace a la cuenta gratuita, espera de unos segundos, o minutos, y por fin el enlace deseado.

El problema viene cuando el fichero en cuestión está partido en una docena de trozos. Ninguno de esos sitios va a permitirte que, por tu cara bonita, hagas varias conexiones simultáneas. Y te obsequiará con tiempos de espera cada vez más largos en cada descarga.

Para esas situaciones he descubierto tucan, un gestor de descargas lbre, de código abierto, escrito en python y ampliable mediate plugins.

Básicamente, abres tucan, copias y pegas las direcciones de los ficheros a bajar, y te olvidas, tucan se encarga de ir conectando y bajando los ficheros.

El problema es que cuando son más de dos enlaces, a mí, personalmente, me parece un coñazo tener que colocar el cursor en el enlace, botón derecho, copia dirección, alt-tab, pegar, enter, alt-tab, repetir.

¿Y que hace un BOFH ?

Efectivamente, usa python. Y en este caso, BeautifulSoup.

Digamos que nos interesa la serie anime Helsing, y hemos encontrado una página en la que están los enlaces a todos los episodios en megaupload.

Descargamos la página con urllib2

page = urllib2.urlopen("http://www.mcanime.net/descarga_directa/anime/detalle/dd_hellsing_espanol_castellano_1313_mas_ova27s/596")

Creamos una lista de tags que apunten a megaupload

linkToSite = SoupStrainer('a', href=re.compile("megaupload.com/")
getTags = [tag for tag in BeautifulSoup(page, parseOnlyThese=linkToSite)]

Y finalmente, extraemos los enlaces

for link in getTags:
     print link.get('href')

Y ahora sí, copiamos el chorro de enlaces a tucan, que el se los irá bajando tranquilamente.

Esas 6 líneas de código, un poco más elaboradas en feedabird.py y el código en colorines (gracias a vim) aquí

Actualización

Resulta que sitios como taringa!, que suelen ser muy buena fuente de enlaces utilizan javascript, sobre todo para la publicidad, que a BS se le atraganta, por lo que hay que hacer una fea ñapa.

page = urllib2.urlopen(options.url).read()
page = re.sub('


Posted by foobar | Permanent Link