Web scraping con Python, Selenium, Lxml y PhantomJS

En este post voy a montar un ejemplo básico de web scraping con Python utilizando el navegador headless PhantomJS. En otras palabras voy a automatizar la extracción de información de una pagina web utilizando un navegador  que no tiene/necesita interfaz de usuario.

  • La forma mas cómoda de trabajar con Python es haciendo uso de los entornos virtuales utilizando el virtualenv. Para instalar todo esto en Linux (en mi caso Debian) hacemos:

    A continuación nos vamos a una carpeta a nuestra elección y ahí creamos y seleccionamos el entorno virtual utilizando los siguientes comandos.
  • Primer Test. Para realizar el scraping necesitamos instalar una serie de dependencias por un lado  selenium y por otro lxml. Para ello ejecutamos  pip install selenium y  pip install lxml dentro de nuestro entorno virtual. Si tenéis problemas instalando lxml es porque como a mí, os faltan dependencias. Por lo que tendreís que borrar el virtualenv que acabamos de crear

    Y a continuación instalar las siguientes dependencias necesarias para compilar el modulo lxml.

    Una vez instalado esto, volvéis a crear el virtualenv como hemos hecho antes, y dentro de él ejecutáis de nuevo la instalación de lxml. Si todo ha ido bien deberías ver al final algo como  Successfully installed lxml . Una vez realizado esto vamos a probar el siguiente código:

    Si lo guardamos en un fichero “test1.py” y lo ejecutamos dentro del virtualenv venv con  python test1.py  obtenemos la salida:
  • Segundo Test. Primero vamos a instalar PhantomJS siguiendo las instrucciones de phantomjs.org, en una carpeta a nuestra elección ejecutamos

    Una vez hecho esto nuestro código solo va a cambiar en la instanciación del browser. Además he especificado una una dimensión para la ventana del mismo por si tuviéramos que obtener datos para un tamaño concreto de ventana en el caso de que la información cambiase en función del mismo debido a un diseño responsive.

    Guardamos el código en un fichero “test2.py” y lo ejecutamos dentro de nuestro virtualenv con  python test2.py y obtendremos la misma salida pero no se nos abrirá ningún navegador.

 

Referencias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.