Ernesto Crespo presentó sobre la extracción de datos con Python (webscraping). Explicó qué es webscraping y Python, y mostró diferentes herramientas de Python para extraer datos de páginas web como Beautiful Soup 4, Pyquery, Scrapperwiki, Webscraping y Scrapy. También extrajo datos del sitio timeanddate.com usando estas herramientas para mostrar ejemplos. Finalmente, habló sobre iniciativas de comunidades relacionadas con webscraping.
Qué es un Histograma estadístico teoria y problema
Extracción de datos con Python (webscraping
1. #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
2. #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.
3. #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
4. #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.
5. #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
7. #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.
9. #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)
13. #MéridaTechMeetup
Sitio a extraer datos:www.timeanddate.com con Beautiful Soup 4
#!/usr/bin/env python
#Importar urllib2 y BeautifulSoup
import urllib2
from 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 Venezuela
soup = 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:47
24 Oct 2013 05:47
25 Oct 2013 05:47
26 Oct 2013 05:48
27 Oct 2013 05:48
28 Oct 2013 05:48
29 Oct 2013 05:48
14. #MéridaTechMeetup
Sitio a extraer datos:www.timeanddate.com con pyquery
#!/usr/bin/env python
#importar pyquery
from 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 tabla
for 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:36
05:47 17:36
05:48 17:35
05:48 17:35
05:48 17:35
05:48 17:34
05:48 17:34
15. #MéridaTechMeetup
Sitio a extraer datos:www.timeanddate.com con ScrapperWiki
#!/usr/bin/env python
#importar scraperwiki
import scraperwiki
#importar lxml.html
import 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 pagina
root = lxml.html.fromstring(html)
#Se crea una lista que almacenara los diccionarios conteniendo
#la informacion que se necesita
lista = []
#Se busca el tag html tbody y tr.
#Esto genera una lista con el contenido del tbody.Esto
#se recorre dicha lista
for 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 pantalla
for 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'}
16. #MéridaTechMeetup
Sitio a extraer datos:www.timeanddate.com con Webscraping
#!/usr/bin/env python
#De webscraping se importa download y xpath
from webscraping import download, xpath
#Se define la instancia Download
D = 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:36
Amanecer: 05:47, Atardecer: 17:36
Amanecer: 05:47, Atardecer: 17:36
Amanecer: 05:48, Atardecer: 17:35
Amanecer: 05:48, Atardecer: 17:35
Amanecer: 05:48, Atardecer: 17:35
Amanecer: 05:48, Atardecer: 17:34
17. #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
21. #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/webscraping
Blog: http://blog.crespo.org.ve/search/label/webscraping