lechazo conf - otogami - web scraping 101
Post on 15-Jul-2015
510 views
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