Web Scraping con python
Diego Pascual LopezDesarrollo backend y Sistemas.@openmelva@ewokcillo
Agradecimientos
¿Que hace este aqui?
¿web scraping?
Lo importante es recibir!!!
¿Que quiero?
¡Ya tengo mis datos!
¿Por que?
Ahora a scrapear ponentes en    opendatasevilla.org.
http://opendatasevilla.org/ponentes.html
Localicemos datos<div id="center" class="nine columns ponentes">   <h2>Ponentes</h2>   <div id="emilio_garcia" class="row"...
Localicemos datos<div id="diego_pascual" class="row">   <div class="title">         <h3>Diego Pascual López</h3>         <...
El rey de la fiesta.  http://pycurl.sourceforge.net/
Mi primer Curlimport pycurlc = pycurl.Curl()c.setopt(pycurl.URL, "http://opendatasevilla.org/ponentes.html")c.setopt(pycur...
¿Quien es quien?●   pycurl.Curl() - creacion del objeto●   setopt(option, value) – nos permite configurar valores para nue...
¿Quien es quien?●   perform() - realiza la peticion con las opiones configuradas en setopt()●   CurlMulti() - gestiona var...
¿Esto ya lo tenia?●   Header response -     –   last_modified     –   https://en.wikipedia.org/wiki/List_of_HTTP_header_fi...
Beatiful soupParser html que como ellos dicen te ahorrara mucho tiempo ydinero..y tienen toda la razon.           http://w...
Uso●   soup = BeautifulSoup(ponentes_html)●   soup.title    # <title>Open Data Sevilla 2012</title>●   soup.title.string  ...
Busqueda●   html_body = soup.body●   html_body.a    # <a class="no-bg" href="/" title="Inicio"><img alt="OpenData Sevilla"...
Busqueda●   html_body.findAll(a)    # [<a class="no-bg" href="/" title="Inicio"><img alt="OpenData Sevilla"    src="images...
Busqueda●   def has_id_but_no_class(tag):       return not tag.has_key(class) and tag.has_key(id)    html_body.findAll(has...
RE, un amigo necesarioContenido en otros formatos:–   Fechas: 28 de noviembre, 2012 > 28/11/2012–   Sitios: Sevilla(Andalu...
Mi githubgit clone https://github.com/ewokcillo/scraper.git
Alternativas●   http://scrapy.org/●   http://code.google.com/p/html5lib/●   http://mechanize.rubyforge.org/●   http://noko...
!Muchas gracias!
Upcoming SlideShare
Loading in …5
×

Python scraping

1,458 views

Published on

Introduccion a web scraping con python.

Published in: Self Improvement

Python scraping

  1. 1. Web Scraping con python
  2. 2. Diego Pascual LopezDesarrollo backend y Sistemas.@openmelva@ewokcillo
  3. 3. Agradecimientos
  4. 4. ¿Que hace este aqui?
  5. 5. ¿web scraping?
  6. 6. Lo importante es recibir!!!
  7. 7. ¿Que quiero?
  8. 8. ¡Ya tengo mis datos!
  9. 9. ¿Por que?
  10. 10. Ahora a scrapear ponentes en opendatasevilla.org.
  11. 11. http://opendatasevilla.org/ponentes.html
  12. 12. Localicemos datos<div id="center" class="nine columns ponentes"> <h2>Ponentes</h2> <div id="emilio_garcia" class="row"> <div id="alberto_ortiz" class="row"> ... <div id="juan_vazquez" class="row"></div>
  13. 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. 14. El rey de la fiesta. http://pycurl.sourceforge.net/
  15. 15. Mi primer Curlimport pycurlc = pycurl.Curl()c.setopt(pycurl.URL, "http://opendatasevilla.org/ponentes.html")c.setopt(pycurl.HTTPHEADER, ["Accept:"])import StringIOb = 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. 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. 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. 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. 19. Beatiful soupParser html que como ellos dicen te ahorrara mucho tiempo ydinero..y tienen toda la razon. http://www.crummy.com/software/BeautifulSoup/
  20. 20. Uso● soup = BeautifulSoup(ponentes_html)● soup.title # <title>Open Data Sevilla 2012</title>● soup.title.string # uOpen Data Sevilla 2012● soup.title.parent #<head>......</head>● soup.script.attrs # {usrc: ujavascripts/modernizr.foundation.js}
  21. 21. Busqueda● html_body = soup.body● html_body.a # <a class="no-bg" href="/" title="Inicio"><img alt="OpenData Sevilla" src="images/logo.png"/></a>● html_body.findAll(a) # [<a class="no-bg" href="/" title="Inicio"><img alt="OpenData Sevilla" src="images/logo.png"/></a>, ..., <a class="no-bg" href="http://www.betabeers.com" target="_blank" title="Betabeers Sevilla"><img alt="Betabeers" border="0" src="images/logo_betabeers.png"/></a>]
  22. 22. Busqueda● html_body.findAll(a) # [<a class="no-bg" href="/" title="Inicio"><img alt="OpenData Sevilla" src="images/logo.png"/></a>, ..., <a class="no-bg" href="http://www.betabeers.com" target="_blank" title="Betabeers Sevilla"><img alt="Betabeers" border="0" src="images/logo_betabeers.png"/></a>]● html_body.find(id=center) #<div class="nine columns ponentes" id="center">...</div>
  23. 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. 24. RE, un amigo necesarioContenido en otros formatos:– Fechas: 28 de noviembre, 2012 > 28/11/2012– Sitios: Sevilla(Andalucia) > [sevilla, andalucia]– Codigos: 9872378SVQ > {SVQ: 9872378}
  25. 25. Mi githubgit clone https://github.com/ewokcillo/scraper.git
  26. 26. Alternativas● http://scrapy.org/● http://code.google.com/p/html5lib/● http://mechanize.rubyforge.org/● http://nokogiri.org/
  27. 27. !Muchas gracias!

×