Este documento describe cómo extraer datos de páginas web (web scraping) utilizando Python. Explica cómo utilizar las bibliotecas PycURL y BeautifulSoup para realizar solicitudes HTTP y analizar el contenido HTML recuperado. Luego muestra ejemplos de cómo buscar y extraer datos específicos como enlaces, elementos con ID y más dentro del contenido HTML. El documento también menciona alternativas como Scrapy y bibliotecas adicionales como Nokogiri y Mechanize.
13. Localicemos datos
<div id="diego_pascual" class="row">
<div class="title">
<h3>Diego Pascual López</h3>
<a target="_blank" title="@" href="http://www.twitter.com/ewokcillo">
<a title="perfil linkedin" target="_blank" href="http://es.linkedin.com/in/ewokcillo">
</div>
<img alt="Diego Pascual Lopez" src="images/ponentes/diegoPascual.jpg">
<p>Caballa de nacimiento y sevillano de adopcion, en mi carrera he pasa...</p>
<p><strong>Imparte: </strong>Taller práctico. El taller será una introducción ...</p>
</div>
14. El rey de la fiesta.
http://pycurl.sourceforge.net/
15. Mi primer Curl
import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, "http://opendatasevilla.org/ponentes.html")
c.setopt(pycurl.HTTPHEADER, ["Accept:"])
import StringIO
b = StringIO.StringIO()
header = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.HEADERFUNCTION, header.write)
c.perform()
ponentes_html = b.getvalue()
header_response = header.getvalue().split('rn')
16. ¿Quien es quien?
● pycurl.Curl() - creacion del objeto
● setopt(option, value) – nos permite configurar valores para nuestro objeto
curl
– pycurl.HTTPHEADER
– pycurl.WRITEFUNCTION
– pycurl.USERPWD
– pycurl.HTTPAUTH
– Podeis encontrar el resto de opciones en
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
17. ¿Quien es quien?
● perform() - realiza la peticion con las opiones configuradas en setopt()
● CurlMulti() - gestiona varios objetos Curl.
● getinfo(option) - nos da informacion sobre la peticion.
– pycurl.HTTP_CODE
– pycurl.TOTAL_TIME
– pycurl.SPEED_DOWNLOAD
– http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
18. ¿Esto ya lo tenia?
● Header response -
– last_modified
– https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses
● Control interno -
– Forms
– fechas
19. Beatiful soup
Parser html que como ellos dicen te ahorrara mucho tiempo y
dinero..y tienen toda la razon.
http://www.crummy.com/software/BeautifulSoup/
20. Uso
● soup = BeautifulSoup(ponentes_html)
● soup.title
# <title>Open Data Sevilla 2012</title>
● soup.title.string
# u'Open Data Sevilla 2012'
● soup.title.parent
#<head>......</head>
● soup.script.attrs
# {u'src': u'javascripts/modernizr.foundation.js'}
23. Busqueda
● def has_id_but_no_class(tag):
return not tag.has_key('class') and tag.has_key('id')
html_body.findAll(has_id_but_no_class)
# [<li id="upo"><a href="http://www.upo.es" target="_blank"
title="Universidad Pablo de Olavide"><img alt="Universidad Pablo de
Olavide" border="0" src="images/upo_logo.gif"/></a></li>]
24. RE, un amigo necesario
Contenido en otros formatos:
– Fechas: 28 de noviembre, 2012 > 28/11/2012
– Sitios: Sevilla(Andalucia) > ['sevilla', 'andalucia']
– Codigos: 9872378SVQ > {'SVQ': '9872378'}