lechazo conf - otogami - web scraping 101

Click here to load reader

Post on 15-Jul-2015

510 views

Category:

Engineering

4 download

Embed Size (px)

TRANSCRIPT

  • Valladolid, 28 de Marzo de 2015

    Jernimo Lpez@jerolba

    Scraping 101 para humanos

    martes 28 de abril de 15

  • Disclaimer

    Disclaimer

    martes 28 de abril de 15

  • Sobre mi

    Jernimo Apasionado de la informtica Tcnico vocacional Jugn

    14 aos de experiencia Mundo empresarial Medios de comunicacin Java, J2EE ...y Scraping

    martes 28 de abril de 15

  • QUmartes 28 de abril de 15

  • el mejor motor de bsqueda y comparador de ofertas de videojuegos

    Qumartes 28 de abril de 15

  • el mejor motor de bsqueda y comparador de zapatillas y material deportivo

    Qumartes 28 de abril de 15

  • Qu

    Qu

    Proporcionar toda la informacin: Accesible Estructurada Sin ruido Actualizada

    Dejar que el usuario elija

    martes 28 de abril de 15

  • CMOmartes 28 de abril de 15

  • Cmo

    Cmo

    Recopilando datosFiltrando los datosOrganizando los datos

    martes 28 de abril de 15

  • Cmo

    Cmo

    Recopilar datos: Servicios web/API Feed FTP Web Scraping

    martes 28 de abril de 15

  • Cmo

    Web Scraping

    Accede al contenidoParsea el HTMLInterpreta el contenido

    martes 28 de abril de 15

  • Cmo

    Web Scraping

    Accede al contenidoParsea el HTMLInterpreta el contenido

    martes 28 de abril de 15

  • Parseo HTML

    Parseo HTMLcurl http://www.game.es/Product/Default.aspx?SKU=068320

    martes 28 de abril de 15

  • Parseo HTML

    Parseo HTMLcurl http://www.game.es/Product/Default.aspx?SKU=068320

    martes 28 de abril de 15

  • Parseo HTML

    Parseo HTML

    Estrategias:

    El buenoEl feoEl malo

    martes 28 de abril de 15

  • Parseo HTML

    El feo: Machote

    Las herramientas son para nenazas

    Uso IndexOf y SubString a saco

    martes 28 de abril de 15

  • Parseo HTML

    El feo: Machote

    martes 28 de abril de 15

  • Parseo HTML

    El malo: Expresiones Regulares

    Son perfectas para buscar patrones!

    Una expresin regular para dominarlos a todos

    martes 28 de abril de 15

  • Parseo HTML

    Expresiones Regulares

    martes 28 de abril de 15

  • Parseo HTML

    Expresiones Regulares

    Ahora tienes dos problemas

    martes 28 de abril de 15

  • Parseo HTML

    Expresiones Regulares

    RegEx

    Jerarquia de Chomsky

    HTML

    martes 28 de abril de 15

  • Parseo HTML

    Expresiones Regulares

    http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454

    martes 28 de abril de 15

  • Parseo HTML

    El bueno: DOM

    Parsea el documento y construye el rbol DOM

    martes 28 de abril de 15

  • Parseo HTML

    DOM

    martes 28 de abril de 15

  • Parseo HTML

    DOM

    martes 28 de abril de 15

  • Parseo HTML

    DOM

    NekkoJSoup

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Expresiones XPath

    Expresiones JQuery

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM Developers Tools/Firebug es tu mejor amigo

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM ... pero ten a mano a CURL

    curl 'http://www.game.es/Product/Default.aspx?SKU=101912' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: es,de-DE;q=0.8,de;q=0.6,en;q=0.4,nl;q=0.2' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://www.game.es/Search/search.aspx?Name=One%20Piece%20Unlimited%20World%20Red&New=True&Pre=True&Dlc=True&Status=A,U,O,P,F,B&PageSize=10&SortField=1&SortDirection=1' -H 'Cookie: ASP.NET_SessionId=msj45p4zhtbx4mljfvymotyl; __utmt=1; __utma=163409322.2020732193.1421491515.1427475287.1427478193.9; __utmb=163409322.2.10.1427478193; __utmc=163409322; __utmz=163409322.1427412085.7.4.utmcsr=game.es|utmccn=(referral)|utmcmd=referral|utmcct=/' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Cuidado con el rendimiento: No recorras todo el DOM cada vez Localiza un nodo principal Navega a partir de l

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Expresiones simples

    Evitad elementos del framework CSS

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Accede por id

    Busca clases del CSS semnticas no de estilo

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Gracias Google por el marcado semntico!

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOMEspecificacin en http://schema.orgBusca facilitarle la vida a Google

    Existe un schema para todo lo que se os ocurra

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Gracias RIA y Ajax!

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Datos en JavaScript del HTMLDatos en peticiones AJAX

    martes 28 de abril de 15

  • Acceso al DOM

    Acceso al DOM

    Datos en JavaScript del HTMLDatos en peticiones AJAX

    martes 28 de abril de 15

  • Tu cdigo

    Tu cdigo

    Abstrae, abstrae, abstrae! :)Desacopla el fetch de la pgina de su

    procesamiento

    Desacopla las pginas entre si cuando navegues de una a otra

    Desacopla la construccin de tus DTOs de la lgica de parseo del HTML

    martes 28 de abril de 15

  • Tu cdigo

    Tu cdigo

    Una clase por pginagetTitulo()getPrecio()getCostesDeEnvio()getDisponibilidad()

    Cuidado con los bucles infinitos en los listados paginados

    martes 28 de abril de 15

  • Tu cdigo

    Tu cdigoAsmelo, cualquier campo al que accedas

    algn da no vendr y tendrs un NPE

    Asmelo, la red falla y los servidores a los que consultas se caen

    En Otogami: Let It Crash y recover Trazas de los errores Si el n de elementos obtenidos menor que % de

    elementos actuales, se aborta el proceso

    martes 28 de abril de 15

  • Tu cdigo

    Tu cdigo

    Somos agilistas y hacemos test, no?Mi mejor test es que funciona con webs

    reales

    En cuanto algo se rompe es porque la web ha cambiado

    Monitoriza logs y alertas

    martes 28 de abril de 15

  • Cmo

    Recopila datos

    Accede al contenidoParsea el HTMLInterpreta el contenido

    martes 28 de abril de 15

  • Accede al contenido

    Accede al contenidoAprndete cmo funciona HTTP

    martes 28 de abril de 15

  • Accede al contenido

    Accede al contenido

    Los distintos verbos: GET POST PUT DELETE

    Cmo van los parmetros en GET?Cmo van los parmetros en POST?

    martes 28 de abril de 15

  • Accede al contenido

    La request

    martes 28 de abril de 15

  • Accede al contenido

    La request

    Para paginar?!

    martes 28 de abril de 15

  • Accede al contenido

    Las cabeceras

    martes 28 de abril de 15

  • Accede al contenido

    Las cabeceras

    Las cabeceras ms importantes: User-Agent Accept Referer Cookie

    martes 28 de abril de 15

  • Accede al contenido

    User Agent

    El User Agent identifica: la aplicacin (tipo) el sistema operativo motor de renderizado el navegador en s

    martes 28 de abril de 15

  • Accede al contenido

    Accept

    Accept especifica qu formatos acepta el navegador: Texto: Html, Xml,.. Imgenes: WebP Compresin y tipos (gzip, deflate,...) Idiomas del usuario

    martes 28 de abril de 15

  • Accede al contenido

    Referer

    Referer especifica al servidor desde qu URL se origin la peticin actual

    El servidor puede condicionalmente modificar el resultado en funcin de su valor

    martes 28 de abril de 15

  • Accede al contenido

    Cookies

    Las cookies son variables que comparten el servidor y el navegador, sin pasarse explcitamente

    Por tanto, guardan estado del usuario: Idioma Pais Moneda etc

    martes 28 de abril de 15

  • Accede al contenido

    Cookies

    Las cookies son variables que comparten el servidor y el navegador, sin pasarse explcitamente

    Por tanto, guardan estado del usuario: Idioma Pais Moneda etc

    martes 28 de abril de 15

  • Accede al contenido

    La de sesin

    martes 28 de abril de 15

  • Accede al contenido

    La de sesin

    martes 28 de abril de 15

  • Accede al contenido

    La de sesin

    martes 28 de abril de 15

  • martes 28 de abril de 15

  • Maldito JavaScriptmartes 28 de abril de 15

  • Maldito JavaScript

    Maldito JavaScript

    Hacer ingeniera inversa y calcular/simular en tu cdigo el resul