SlideShare ist ein Scribd-Unternehmen logo
1 von 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!

Weitere ähnliche Inhalte

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docx
LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docxLAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docx
LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docxRafael Reverte Pérez
 
La Magia de Pensar en Grande -- David J_ Schwartz.pdf
La Magia de Pensar en Grande -- David J_ Schwartz.pdfLa Magia de Pensar en Grande -- David J_ Schwartz.pdf
La Magia de Pensar en Grande -- David J_ Schwartz.pdfvan graznarth
 
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantes
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantesGUIA DE NUTRICION Y ENTRENAMIENTO para principiantes
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantesDiegoGandara5
 
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...JulianaosorioAlmecig
 
Puede un cristiano genuino ser poseído por.pptx
Puede un cristiano genuino ser poseído por.pptxPuede un cristiano genuino ser poseído por.pptx
Puede un cristiano genuino ser poseído por.pptxRicardoMoreno95679
 
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdfMiNeyi1
 
Revista Actualidad Espiritista N°33.pdf
Revista  Actualidad Espiritista N°33.pdfRevista  Actualidad Espiritista N°33.pdf
Revista Actualidad Espiritista N°33.pdfPatricia487970
 
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
 
Cuadernillo para niños inicial 2 años con 15 páginas
Cuadernillo para niños inicial 2 años con 15 páginasCuadernillo para niños inicial 2 años con 15 páginas
Cuadernillo para niños inicial 2 años con 15 páginasNinettAB
 
la obra literaria EL AVARO DE moliere 2024
la obra literaria EL AVARO DE moliere 2024la obra literaria EL AVARO DE moliere 2024
la obra literaria EL AVARO DE moliere 2024Jose Aguilar
 
La acción psicosocial desde la perspectiva humanista.pptx
La acción psicosocial desde la perspectiva humanista.pptxLa acción psicosocial desde la perspectiva humanista.pptx
La acción psicosocial desde la perspectiva humanista.pptxnomadadigital14
 
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
 
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
 

Kürzlich hochgeladen (13)

LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docx
LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docxLAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docx
LAS CIRCULARES Y MIS COMUNICADOS de los Maestres COMENTADOS.docx
 
La Magia de Pensar en Grande -- David J_ Schwartz.pdf
La Magia de Pensar en Grande -- David J_ Schwartz.pdfLa Magia de Pensar en Grande -- David J_ Schwartz.pdf
La Magia de Pensar en Grande -- David J_ Schwartz.pdf
 
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantes
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantesGUIA DE NUTRICION Y ENTRENAMIENTO para principiantes
GUIA DE NUTRICION Y ENTRENAMIENTO para principiantes
 
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...
Programa - CIEI 2024.pdf Desafíos, avances y recomendaciones en el acceso a ...
 
Puede un cristiano genuino ser poseído por.pptx
Puede un cristiano genuino ser poseído por.pptxPuede un cristiano genuino ser poseído por.pptx
Puede un cristiano genuino ser poseído por.pptx
 
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf
4.- COMO HACER QUE TE PASEN COSAS BUENAS.pdf
 
Revista Actualidad Espiritista N°33.pdf
Revista  Actualidad Espiritista N°33.pdfRevista  Actualidad Espiritista N°33.pdf
Revista Actualidad Espiritista N°33.pdf
 
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
 
Cuadernillo para niños inicial 2 años con 15 páginas
Cuadernillo para niños inicial 2 años con 15 páginasCuadernillo para niños inicial 2 años con 15 páginas
Cuadernillo para niños inicial 2 años con 15 páginas
 
la obra literaria EL AVARO DE moliere 2024
la obra literaria EL AVARO DE moliere 2024la obra literaria EL AVARO DE moliere 2024
la obra literaria EL AVARO DE moliere 2024
 
La acción psicosocial desde la perspectiva humanista.pptx
La acción psicosocial desde la perspectiva humanista.pptxLa acción psicosocial desde la perspectiva humanista.pptx
La acción psicosocial desde la perspectiva humanista.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
 
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
 

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/