SlideShare uma empresa Scribd logo
1 de 27
Web Scraping con python
Diego Pascual Lopez
Desarrollo 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">
   <div id="alberto_ortiz" class="row">
   ...
   <div id="juan_vazquez" class="row">
</div>
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>
El rey de la fiesta.




  http://pycurl.sourceforge.net/
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')
¿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
¿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
¿Esto ya lo tenia?

●   Header response -
     –   last_modified
     –   https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses


●   Control interno -
     –   Forms
     –   fechas
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/
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'}
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>]
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>
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>]
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'}
Mi github



git clone https://github.com/ewokcillo/scraper.git
Alternativas

●   http://scrapy.org/
●   http://code.google.com/p/html5lib/
●   http://mechanize.rubyforge.org/
●   http://nokogiri.org/
!Muchas gracias!

Mais conteúdo relacionado

Semelhante a Python scraping

Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicketAdrià Solé Orrit
 
Anthony saravia documentacion-php
Anthony saravia documentacion-phpAnthony saravia documentacion-php
Anthony saravia documentacion-phpAnthony Saravia
 
Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UIGuillermo Paz
 
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a GoogleiDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a GoogleMiguel Ángel Pau
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Pakman Lh
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Pagina web en css
Pagina web en cssPagina web en css
Pagina web en cssnelson4409
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018nacho mascort
 
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!SergioIglesiasNET
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Acquia
 

Semelhante a Python scraping (20)

De HTML a Express
De HTML a ExpressDe HTML a Express
De HTML a Express
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
Anthony saravia documentacion-php
Anthony saravia documentacion-phpAnthony saravia documentacion-php
Anthony saravia documentacion-php
 
En 20 minutos ... jQuery
En 20 minutos ... jQueryEn 20 minutos ... jQuery
En 20 minutos ... jQuery
 
Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UI
 
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a GoogleiDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
 
(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
6.angular js
6.angular js6.angular js
6.angular js
 
Pagina web en css
Pagina web en cssPagina web en css
Pagina web en css
 
Ajax
AjaxAjax
Ajax
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
 
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
JoomlaDay Sevilla 2015 - Desarrollo de plantillas Joomla!
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 

Último

organizador visula diversidad linguistica y etnica.docx
organizador visula diversidad linguistica y etnica.docxorganizador visula diversidad linguistica y etnica.docx
organizador visula diversidad linguistica y etnica.docxShirleyJaneFrancoSar
 
Ejercicios de Lengua que deberías prácticar para el uso de comas
Ejercicios de Lengua que deberías prácticar para el uso de comasEjercicios de Lengua que deberías prácticar para el uso de comas
Ejercicios de Lengua que deberías prácticar para el uso de comasmichica1
 
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...FernandoJavierGarcia11
 
tarjeta personal de trabajo en la universidad
tarjeta personal de trabajo en la universidadtarjeta personal de trabajo en la universidad
tarjeta personal de trabajo en la universidadpe0939
 
Conoce el porque BTS no es un grupo sobrevalorado
Conoce el porque BTS no es un grupo sobrevaloradoConoce el porque BTS no es un grupo sobrevalorado
Conoce el porque BTS no es un grupo sobrevaloradovazquezacostavanessa
 
El papel de la mujer Hoy! - Empoderamiento
El papel de la mujer Hoy! - EmpoderamientoEl papel de la mujer Hoy! - Empoderamiento
El papel de la mujer Hoy! - EmpoderamientoLuzcellySanchezAngel
 
el desafío del amor .pdf el desafío del amor
el desafío del amor .pdf el desafío del amorel desafío del amor .pdf el desafío del amor
el desafío del amor .pdf el desafío del amorrtvmfd5s46
 
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptx
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptxABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptx
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptxXavierCrdenasGarca
 
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOS
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOSCATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOS
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOSFredyMolina26
 
Uso correcto del silbato y formaciones.pdf
Uso correcto del silbato y formaciones.pdfUso correcto del silbato y formaciones.pdf
Uso correcto del silbato y formaciones.pdfzrzpwy2c5g
 
El enamoramiento es una fuente de inspiración.pdf
El enamoramiento es una fuente de inspiración.pdfEl enamoramiento es una fuente de inspiración.pdf
El enamoramiento es una fuente de inspiración.pdfEdward Chero Valdivieso
 
Virginia-Satir (1).pptx Autoestima y desarrollo personal
Virginia-Satir (1).pptx Autoestima y desarrollo personalVirginia-Satir (1).pptx Autoestima y desarrollo personal
Virginia-Satir (1).pptx Autoestima y desarrollo personalCHUPACABRA6
 
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdf
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdfESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdf
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdfyhostend
 
Enciclopedia_de_las_Cruces_de_Encarnacio.pdf
Enciclopedia_de_las_Cruces_de_Encarnacio.pdfEnciclopedia_de_las_Cruces_de_Encarnacio.pdf
Enciclopedia_de_las_Cruces_de_Encarnacio.pdfCatherineMaechtig
 
Revista Actualidad Espiritista N°33.pdf
Revista  Actualidad Espiritista N°33.pdfRevista  Actualidad Espiritista N°33.pdf
Revista Actualidad Espiritista N°33.pdfPatricia487970
 
CURSO BÁSICO ÁNGELES Y ÁRCANGELES.pdf
CURSO  BÁSICO  ÁNGELES Y  ÁRCANGELES.pdfCURSO  BÁSICO  ÁNGELES Y  ÁRCANGELES.pdf
CURSO BÁSICO ÁNGELES Y ÁRCANGELES.pdfestudiosespiritasdep
 
Genograma familiar esquema de la familia
Genograma familiar esquema de la familiaGenograma familiar esquema de la familia
Genograma familiar esquema de la familializv61841
 
El Arte de Soplar Brasas - coaching ontológico
El Arte de Soplar Brasas - coaching ontológicoEl Arte de Soplar Brasas - coaching ontológico
El Arte de Soplar Brasas - coaching ontológicoCarlosMuoz374939
 

Último (19)

organizador visula diversidad linguistica y etnica.docx
organizador visula diversidad linguistica y etnica.docxorganizador visula diversidad linguistica y etnica.docx
organizador visula diversidad linguistica y etnica.docx
 
Ejercicios de Lengua que deberías prácticar para el uso de comas
Ejercicios de Lengua que deberías prácticar para el uso de comasEjercicios de Lengua que deberías prácticar para el uso de comas
Ejercicios de Lengua que deberías prácticar para el uso de comas
 
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...
DINAMICA VEAMOS TEMA 2 Padres y Padrinos, facilitadores del proceso de crecim...
 
tarjeta personal de trabajo en la universidad
tarjeta personal de trabajo en la universidadtarjeta personal de trabajo en la universidad
tarjeta personal de trabajo en la universidad
 
Conoce el porque BTS no es un grupo sobrevalorado
Conoce el porque BTS no es un grupo sobrevaloradoConoce el porque BTS no es un grupo sobrevalorado
Conoce el porque BTS no es un grupo sobrevalorado
 
El papel de la mujer Hoy! - Empoderamiento
El papel de la mujer Hoy! - EmpoderamientoEl papel de la mujer Hoy! - Empoderamiento
El papel de la mujer Hoy! - Empoderamiento
 
el desafío del amor .pdf el desafío del amor
el desafío del amor .pdf el desafío del amorel desafío del amor .pdf el desafío del amor
el desafío del amor .pdf el desafío del amor
 
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptx
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptxABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptx
ABRAHAM HAROLD MASLOW 1908-1970 HISTORIA.pptx
 
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOS
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOSCATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOS
CATEQUESIS SOBRE LA FE CATÓLICA PARA ADULTOS
 
Uso correcto del silbato y formaciones.pdf
Uso correcto del silbato y formaciones.pdfUso correcto del silbato y formaciones.pdf
Uso correcto del silbato y formaciones.pdf
 
El enamoramiento es una fuente de inspiración.pdf
El enamoramiento es una fuente de inspiración.pdfEl enamoramiento es una fuente de inspiración.pdf
El enamoramiento es una fuente de inspiración.pdf
 
Virginia-Satir (1).pptx Autoestima y desarrollo personal
Virginia-Satir (1).pptx Autoestima y desarrollo personalVirginia-Satir (1).pptx Autoestima y desarrollo personal
Virginia-Satir (1).pptx Autoestima y desarrollo personal
 
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdf
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdfESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdf
ESCATOLOGÍA: LA FUERZA Y ESPERANZA DEL VERDADERO PUEBLO DE YHWH.pdf
 
Enciclopedia_de_las_Cruces_de_Encarnacio.pdf
Enciclopedia_de_las_Cruces_de_Encarnacio.pdfEnciclopedia_de_las_Cruces_de_Encarnacio.pdf
Enciclopedia_de_las_Cruces_de_Encarnacio.pdf
 
Revista Actualidad Espiritista N°33.pdf
Revista  Actualidad Espiritista N°33.pdfRevista  Actualidad Espiritista N°33.pdf
Revista Actualidad Espiritista N°33.pdf
 
CURSO BÁSICO ÁNGELES Y ÁRCANGELES.pdf
CURSO  BÁSICO  ÁNGELES Y  ÁRCANGELES.pdfCURSO  BÁSICO  ÁNGELES Y  ÁRCANGELES.pdf
CURSO BÁSICO ÁNGELES Y ÁRCANGELES.pdf
 
Genograma familiar esquema de la familia
Genograma familiar esquema de la familiaGenograma familiar esquema de la familia
Genograma familiar esquema de la familia
 
LEY DE LA GRATITUD21..................pdf
LEY  DE LA GRATITUD21..................pdfLEY  DE LA GRATITUD21..................pdf
LEY DE LA GRATITUD21..................pdf
 
El Arte de Soplar Brasas - coaching ontológico
El Arte de Soplar Brasas - coaching ontológicoEl Arte de Soplar Brasas - coaching ontológico
El Arte de Soplar Brasas - coaching ontológico
 

Python scraping

  • 2. Diego Pascual Lopez Desarrollo backend y Sistemas. @openmelva @ewokcillo
  • 6. Lo importante es recibir!!!
  • 8. ¡Ya tengo mis datos!
  • 10. Ahora a scrapear ponentes en opendatasevilla.org.
  • 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. 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'}
  • 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. 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. 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'}
  • 25. Mi github git clone https://github.com/ewokcillo/scraper.git
  • 26. Alternativas ● http://scrapy.org/ ● http://code.google.com/p/html5lib/ ● http://mechanize.rubyforge.org/ ● http://nokogiri.org/