Web Scraping con Python

  • 6 Respuestas
  • 4786 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5670
  • Actividad:
    16.67%
  • Country: ar
  • Reputación 37
  • ANTRAX
  • Skype: underc0de.org
  • Twitter: @Underc0de
    • Ver Perfil
    • Underc0de
    • Email

Web Scraping con Python

  • en: Mayo 25, 2017, 01:17:12 pm

Primero que nada, para el que no lo sabe, vamos a preguntarle a Wikipedia que es “Scrapping”.

Citar
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.

Código: Text
  1. import urllib
  2. 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”.


Código: Text
  1. url = "http://www.subtorrents.com/peliculas/estrenos/"
  2. page = urllib.urlopen(url)
  3. source = BeautifulSoup(page, "html.parser")

Ahora para comprobar que vamos bien, usamos el metodo find y le decimos que nos imprima la etiqueta title.

Código: Text
  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:

Código: Text
  1. for linea in tabla.find_all("tr", {"class" : "fichserietabla_b"}):
  2. for titulo in linea.find_all("td", {"class":"vertThseccion"}):
  3. 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


Desconectado kafkam

  • *
  • Underc0der
  • Mensajes: 10
  • Actividad:
    0%
  • Reputación 0
  • Skype: Rmanueld1
    • Ver Perfil

Re:Web Scraping con Python

  • en: Junio 13, 2017, 09:46:58 pm
Excelente post hermano! Muy bien explicado, y como tu dices... Para cada sitio hay que aplicarle su propia logica, pero al tener ciertas nociones basicas como se facilita eh? Saludos.

Desconectado DevilCry

  • *
  • Underc0der
  • Mensajes: 14
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Web Scraping con Python

  • en: Junio 14, 2017, 01:19:28 pm
Hola ANTRAX

He empezado a tocar un poco Python y estoy siguiendo tu ejemplo, pero me aparece el siguiente fallo:

Access denied | You are not allowed to view links. Register or Login used Cloudflare to restrict access

Estoy investigando por la red, pero todo lo que encuentro es en ingles y mi ingles es algo flojo. He hecho varias pruebas con casas que he visto pero me sigue saliendo lo mismo.

Por cierto, podrias colgar el codigo completo.

Un Saludo

Desconectado zoro248

  • *
  • Underc0der
  • Mensajes: 241
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email

Re:Web Scraping con Python

  • en: Junio 14, 2017, 07:22:53 pm
muy bueno, me lo llevo para pruebas offline

Desconectado ronluas

  • *
  • Underc0der
  • Mensajes: 144
  • Actividad:
    0%
  • Reputación 2
    • Ver Perfil

Re:Web Scraping con Python

  • en: Septiembre 25, 2019, 11:52:01 am
Esta muy interesante talves si actualizamos el post.
Youtube: You are not allowed to view links. Register or Login - Twitter: You are not allowed to view links. Register or Login

Desconectado Diesan Romero

  • *
  • Underc0der
  • Mensajes: 14
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email

Re:Web Scraping con Python

  • en: Septiembre 25, 2019, 07:34:20 pm
You are not allowed to view links. Register or Login
Excelente post hermano! Muy bien explicado, y como tu dices... Para cada sitio hay que aplicarle su propia logica, pero al tener ciertas nociones basicas como se facilita eh? Saludos.

Yo creo que si la web es bien semántica, sería un poco más fácil.
Puedes usar herramientas como W3C Validator para verificar esto.
Una web semántica siempre está bien organizada.

Desconectado sanacorea

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Re:Web Scraping con Python

  • en: Enero 02, 2020, 11:26:46 pm
Buenas!
Algunas imagenes estan caidas.

 

[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 3373
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 3
Vistas: 3742
Último mensaje Enero 18, 2020, 02:43:53 am
por darkucla
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 5077
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 4544
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 4410
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40