21
#MéridaTechMeetup Extracción de datos con Python (webscraping) Ernesto Crespo Blog: http://blog.crespo.org.ve Blog: http://ecrespo.github.io Github: https://github.com/ecrespo Bitbucket https://bitbucket.org/ecrespo Twitter: https://twitter.com/_seraph1

Extracción de datos de páginas web con Python (webscraping)

Embed Size (px)

Citation preview

#MéridaTechMeetup

Extracción de datos con Python (webscraping)

Ernesto Crespo

● Blog: http://blog.crespo.org.ve

● Blog: http://ecrespo.github.io

● Github: https://github.com/ecrespo

● Bitbucket https://bitbucket.org/ecrespo

● Twitter: https://twitter.com/_seraph1

#MéridaTechMeetup

Extracción de datos con Python (webscraping)

"Somos como enanos a los hombros de gigantes. Podemos ver más, y más lejos que ellos, no porque la agudeza de nuestra vista ni por la altura de nuestro cuerpo, sino porque somos levantados por su gran altura". Bernardo de Chartres

"Extración de datos con python (webscraping) " by Ernesto Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

#MéridaTechMeetup

Extracción de datos con Python (webscraping)

Agenda:

● ¿Qué es webscraping?

● ¿Qué es Python?

● Gobierno Abierto

● Datos Abiertos

● Herramientas de Python para extraer datos de páginas web

● Extraer datos con Beautiful Soup 4

● Extraer datos con Pyquery

● Extraer datos con Scrapperwiki

● Extraer datos conWebscraping

● Extraer datos con el Framework Scrapy

● Iniciativas de comunidades

#MéridaTechMeetup

¿Qué es webscraping?

Es el proceso de recolección o extracción de datos de páginas web de forma automática,

es un campo muy activo y en desarrollo que comparte objetivos con la web semántica,

el procesamiento de texto, inteligencia artificial e interacción humano computador.

#MéridaTechMeetup

¿Qué es Python?

Lenguaje de programación interpretado multiparadigma, soporta orientación a objetos,

programación imperativa y, en menor medida programación funcional. Usa tipado

dinámico y es multiplataforma.

Es administrado por la Python Software Foundation y posee una Licencia de código

Abierto Python Software Foundation License que es compatible con la Licencia Pública

GNU.

http://www.python.org

#MéridaTechMeetup

Gobierno Abierto:

● Datos Abierto

● Procesos Abiertos

● Redes Sociales

● Colaboración

● Participación ciudadana

#MéridaTechMeetup

Datos Abiertos (Datos vinculados):

Es una filosofía y práctica que persigue que determinados datos esten

disponibles de forma libre para todo el mundo, sin restricciones de derecho de

autor, de patentes o de otros mecanismos de control.

#MéridaTechMeetup

Pero hasta ahora no hay muchos datos abiertos...

#MéridaTechMeetup

Herramientas de Python para extraer datos de páginas web

● Urllib y urlopen● Beautiful Soup 4● Python Mechanize (basado en perl mechanize)● Pyquery● Scrapermark● ScrapperWiki● Webscraping● Scrapy : Framework para la extracción de datos de forma automatizada● Selenium (para próxima versión de la presentación)

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com con Beautiful Soup 4#!/usr/bin/env python#Importar urllib2 y BeautifulSoupimport urllib2from BeautifulSoup import BeautifulSoup

#Se crea la instancia y se abre el url de timeanddate #buscando la informacion de la hora de salir el sol en Venezuelasoup = BeautifulSoup(urllib2.urlopen('http://www.timeanddate.com/worldclock/astronomy.html?n=58').read())

#Se busca la palabra table, y de ahi class y se busca el contenido#de cada columna de la tabla.

for row in soup('table', {'class': 'spad'})[0].tbody('tr'): tds = row('td') #Se muestra la fecha y hora de la salida del sol print tds[0].string, tds[1].string

El resultado de la ejecución es la siguiente:23 Oct 2013 05:4724 Oct 2013 05:4725 Oct 2013 05:4726 Oct 2013 05:4827 Oct 2013 05:4828 Oct 2013 05:4829 Oct 2013 05:48

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com con pyquery#!/usr/bin/env python

#importar pyqueryfrom pyquery import *

#Se Crea la instancia de la Clase PyQuery pasando el url de#timeanddate.html = PyQuery(url='http://www.timeanddate.com/worldclock/astronomy.html?n=58')#Se busca el tag html de la tabla.#Recibe todos los elementos de la tabla.trs = html('table.spad tbody tr')

#Se muestra los elementos de la tabla.print trs

#Se recorre los elementos de la tablafor tr in trs: tds = tr.getchildren() print tds[1].text, tds[2].text

El resultado de la ejecución del script se muestra a continuación:05:47 17:3605:47 17:3605:48 17:3505:48 17:3505:48 17:3505:48 17:3405:48 17:34

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com con ScrapperWiki#!/usr/bin/env python#importar scraperwikiimport scraperwiki#importar lxml.htmlimport lxml.html

#Url de la pagina timeanddate de la#info de Venezuela.url = "http://www.timeanddate.com/worldclock/astronomy.html?n=58"

#se crea la instancia de la clase scrape pasando el#url del sitio a extraer la informacion.html = scraperwiki.scrape(url)

#Se busca en el codigo html de la paginaroot = lxml.html.fromstring(html)#Se crea una lista que almacenara los diccionarios conteniendo#la informacion que se necesitalista = []#Se busca el tag html tbody y tr.#Esto genera una lista con el contenido del tbody.Esto#se recorre dicha listafor tr in root.cssselect("tbody tr "): #Se selecciona la informacion que aparece en #el tag html td tds = tr.cssselect("td") #Se guarda la informacion en un diccionario Datos = { 'fecha': tds[0].text_content(), 'amanecer': tds[1].text_content(), 'atardecer': tds[2].text_content() } #Se agrega los datos a la lista lista.append(datos)#Se muestra la lista en pantallafor i in lista: print i

El resultado de la ejecución del script a continuación: {'fecha': '26 Oct 2013', 'atardecer': '17:35', 'amanecer': '05:48'}{'fecha': '27 Oct 2013', 'atardecer': '17:35', 'amanecer': '05:48'}{'fecha': '28 Oct 2013', 'atardecer': '17:35', 'amanecer': '05:48'}{'fecha': '29 Oct 2013', 'atardecer': '17:34', 'amanecer': '05:48'}{'fecha': '30 Oct 2013', 'atardecer': '17:34', 'amanecer': '05:48'}{'fecha': '31 Oct 2013', 'atardecer': '17:34', 'amanecer': '05:48'}{'fecha': '1 Nov 2013', 'atardecer': '17:33', 'amanecer': '05:49'}

#MéridaTechMeetup

Sitio a extraer datos:www.timeanddate.com con Webscraping#!/usr/bin/env python#De webscraping se importa download y xpathfrom webscraping import download, xpath

#Se define la instancia DownloadD = download.Download()

#Se obtiene la informacion de la salida y ocultamiento del#sol en Venezuela desde la pagina timeanddate.html = D.get('http://www.timeanddate.com/worldclock/astronomy.html?n=58')

#Se busca la informacion en la tabla donde se muestra.for row in xpath.search(html, '//table[@class="spad"]/tbody/tr'): #Se busca en la fila el tag /td cols = xpath.search(row, '/td') #Se muestra la informacion en pantalla print 'Amanecer: %s, Atardecer: %s' % (cols[1], cols[2])

A continuación se muestra el resultado de la ejecución del script:Amanecer: 05:47, Atardecer: 17:36Amanecer: 05:47, Atardecer: 17:36Amanecer: 05:47, Atardecer: 17:36Amanecer: 05:48, Atardecer: 17:35Amanecer: 05:48, Atardecer: 17:35Amanecer: 05:48, Atardecer: 17:35Amanecer: 05:48, Atardecer: 17:34

#MéridaTechMeetup

Extracción de datos con el Framework Scrapy

● Extracción de datos de páginas web con scrapy

http://blog.crespo.org.ve/2015/01/extraccion-de-datos-de-paginas-web-con.html

● Extracción de datos de páginas web con scrapy y MongoDB

http://blog.crespo.org.ve/2015/01/extraccion-de-datos-de-paginas-web-con_2.html

#MéridaTechMeetup

Iniciativas de comunidades

#MéridaTechMeetup

Iniciativas de comunidades

#MéridaTechMeetup

#MéridaTechMeetup

¿Preguntas?

"Si he logrado ver más lejos, ha sido porque he subido a hombros de gigantes". Isaac Newton

Descarga de la presentación:http://www.slideshare.net/ecrespo/webscrapingBlog: http://blog.crespo.org.ve/search/label/webscraping