Primero que nada, para el que no lo sabe, vamos a preguntarle a Wikipedia que es “Scrapping”.
Web scraping es una técnica utilizada mediante programas de software para extraer información de sitios web. Usualmente, estos programas simulan la navegación de un humano en la World Wide Web ya sea utilizando el protocolo HTTP manualmente, o incrustando un navegador en una aplicación.
Entendido lo anterior, lo que nosotros vamos a hacer es escribir nuestros propios scripts que extraigan información que nos interese de alguna web en particular; ya sea para facilitar su lectura, para procesar esa información y usarla en conjunto con otro código o porque somos l33t y queremos leer lo que nos interesa por consola.
Principalmente, accedemos a la web de nuestro interés. En mi caso, voy a usar como ejemplo SubTorrents, una pagina de donde descargo películas y series por torrent (la recomiendo).
De la cual vamos a obtener las ultimas películas publicadas de la sección Estrenos.
Ya tenemos la web, ahora nos toca saber puntualmente que es lo que vamos a extraer y de donde. Para esto vamos a usar las Developer Tools de nuestro navegador preferido, en este caso Firefox.
Nos situamos en el elemento que queremos imprimir con nuestro script, y le damos click derecho y luego “Inspeccionar elemento”.
El navegador nos va a mostrar seleccionado el código en el source de donde inspeccionamos.
Como
vemos, el titulo de la película esta dentro de una etiqueta a de
hipervinculo, dentro de una tabla identificada como searchResult.
Ya identificado lo que vamos a scrappear, vamos a programar!.
Para esto, vamos a utilizar dos librerias de Python. Una es urllib con la cual vamos a conectarnos al sitio web y obtener su source. Por otro lado, ocupamos BeautifulSoup, que nos va a ayudar a parsear el html para tener un resultado mas limpio (de lo contrario deberíamos recurrir a expresiones regulares, lo cual hace mas engorroso el tema).
Primero que nada importamos los modulos mencionados.
1 2 | import urllib from bs4 import BeautifulSoup |
Ahora declaramos en una variable el url de la web que vamos a utilizar y con el método urlopen establecemos conexión a la misma para poder obtener el html del source dentro de otra variable para luego pasarsela a BeautifulSoup y que este se encargue de la “magia”.
1 2 3 | url = "http://www.subtorrents.com/peliculas/estrenos/" page = urllib.urlopen(url) source = BeautifulSoup(page, "html.parser") |
Ahora para comprobar que vamos bien, usamos el metodo find y le decimos que nos imprima la etiqueta title.
1 | print source.find("title").text |
Ven? Lo que hicimos fue buscar en el source de la web la etiqueta title con find() y la imprimimos sin sus respectivos tags para tener un limpio resultado sumándole el metodo text. Sigamos con nuestro script…
A la hora de querer imprimir el contenido de cada etiqueta se presento el problema de que había otra etiqueta igual y solo queremos imprimir el titulo de la película. Pero si prestamos atención al codigo HTML, vemos que esta etiqueta se encuentra dentro de una fila en una columna
Así que para ser más objetivos, usamos un bucle FOR anidado que dentro de la tabla, busque cada dentro de cada
dentro de cada . No se asusten que es simple…
Escribimos:
1 2 3 | for linea in tabla.find_all("tr", {"class" : "fichserietabla_b"}): for titulo in linea.find_all("td", {"class":"vertThseccion"}): print titulo.text |
Ahora ejecutamos el script y …
Fácil, no?.
Tengan
en cuenta que depende de la web siempre van a tener que aplicar su
propia lógica, ya que muchas veces no nos la dejan tan fácil o los
programadores no son muy prolijos.
Autor: Caffeine