Extrayendo datos de la web con Scrapy

  
9 de Febrero de 2015   0  

Scrapy es una librería Open Source que nos permite extraer información importante que se encuentra en internet. Es posible leer el contenido de una web y movernos en su estructura HTML para analizar sus datos y explotarlos según sean nuestras necesidades.

En este post te mostramos un ejemplo muy básico utilizando nuestro sitio web Pythonízame.

 

Instalación.

Primero debemos tener instalada la librería Scrapy y esto se realiza de la siguiente manera:

1
$ pip install scrapy

 

Construyendo un spyder.

Un Spyder es un software que puede recorrer el contenido de la web y extraer información de ella. En este caso, escribiremos el siguiente con Scrapy:

Nota: Si desean también lo pueden descargar desde aquí.

from scrapy import Field, Spider, Item, Selector 

class Post(Item):
    url = Field()
    title = Field()

class PythonizameSpider(Spider):
   name, start_urls = 'PythonizameSpider', ['http://pythoniza.me']

   def parse(self, response):
       sel = Selector(response)
       sites = sel.xpath('//div[@id="blog"]//h2')
       items = []

       for site in sites:
           post = Post()
           post['title'] = site.xpath('a/text()').extract()
           post['url'] = site.xpath('a/@href').extract()
           items.append(post)
       return items

En el código anterior podemos observar 2 elementos importantes:

  1. El objeto Post, el cual es una clase del tipo “Item” que se encarga de contener la información que vayamos recuperando de la web.
  2. El objeto PythonizameSpyder, el cual es una clase de tipo “Spyder” que se encarga de extraer información de la web. Este Spyder tiene un ciclo “for” que recorre todos los elementos “h2″ contenidos dentro del div con id “blog”. Ingresa a este div y obtiene la información de cada etiqueta <a> para almacenar el texto y referencia de cada post.

 

Liberando el spyder.

Una vez que ya tenemos listo este ejemplo, lo guardaremos con el nombre “pyme_scrapy.py”, ingresamos a la carpeta contenedora del archivo desde nuestra terminal y lo ejecutamos de la siguiente manera:

$scrapy runspider pyme_scrapy.py -o scraped_data.json

 

El resultado del análisis de scrapy será contenido en el archivo “scraped_data.json”, y si lo abrimos con algún editor de texto, encontraremos algo similar a:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[{"url": ["http://pythoniza.me/libro-creating-apps-kivy/"], "title": ["Libro \u2013 Creating apps with Kivy"]},
 
{"url": ["http://pythoniza.me/tecnologias-detras-de-instagram/"], "title": ["Tecnolog\u00edas detr\u00e1s de Instagram"]},
 
{"url": ["http://pythoniza.me/libro-introduccion-tornado/"], "title": ["Libro \u2013 Introducci\u00f3n a Tornado"]},
 
{"url": ["http://pythoniza.me/sublime-text-powered-python/"], "title": ["Sublime Text Powered by Python"]},
 
{"url": ["http://pythoniza.me/entrevista-con-el-creador-de-ninja-ide/"], "title": ["Entrevista con el creador de Ninja IDE"]},
 
{"url": ["http://pythoniza.me/dale-un-nuevo-look-tu-admin-en-django/"], "title": ["Dale un nuevo look a tu admin en Django"]},
 
{"url": ["http://pythoniza.me/python-geospatial-development/"], "title": ["Libro \u2013 Python Geospatial Development"]},
 
{"url": ["http://pythoniza.me/que-lenguaje-de-programacion-debo-aprender/"], "title": ["\u00bfQue lenguaje de programaci\u00f3n debo aprender?"]},
 
{"url": ["http://pythoniza.me/django-girls-tijuana/"], "title": ["Django Girls Tijuana"]},
 
{"url": ["http://pythoniza.me/django-1-8-alpha-1/"], "title": ["Django 1.8 alpha 1"]}]

Documentación oficial: doc.scrapy.org



Alex Dzul

FullStack Python / Django Developer. #jslove

Etiquetas

Temas relacionados