lechazo conf - otogami - web scraping 101

of 74 /74
Valladolid, 28 de Marzo de 2015 Jerónimo López @jerolba Scraping 101 para humanos martes 28 de abril de 15

Author: jeronimo-lopez

Post on 15-Jul-2015

514 views

Category:

Engineering


4 download

Embed Size (px)

TRANSCRIPT

Page 1: Lechazo Conf - Otogami - Web Scraping 101

Valladolid, 28 de Marzo de 2015

Jerónimo Ló[email protected]

Scraping 101 para humanos

martes 28 de abril de 15

Page 2: Lechazo Conf - Otogami - Web Scraping 101

Disclaimer

Disclaimer

martes 28 de abril de 15

Page 3: Lechazo Conf - Otogami - Web Scraping 101

Sobre mi

Jerónimo‣ Apasionado de la informática

‣ Técnico vocacional

‣ Jugón

‣ 14 años de experiencia

‣ Mundo empresarial

‣ Medios de comunicación

‣ Java, J2EE

‣ ...y Scraping

martes 28 de abril de 15

Page 4: Lechazo Conf - Otogami - Web Scraping 101

QUÉmartes 28 de abril de 15

Page 5: Lechazo Conf - Otogami - Web Scraping 101

el mejor motor de búsqueda y comparador de ofertas de videojuegos

Quémartes 28 de abril de 15

Page 6: Lechazo Conf - Otogami - Web Scraping 101

el mejor motor de búsqueda y comparador de zapatillas y material deportivo

Quémartes 28 de abril de 15

Page 7: Lechazo Conf - Otogami - Web Scraping 101

Qué

Qué

‣Proporcionar toda la información:• Accesible

• Estructurada

• Sin ruido

• Actualizada

‣Dejar que el usuario elija

martes 28 de abril de 15

Page 8: Lechazo Conf - Otogami - Web Scraping 101

CÓMOmartes 28 de abril de 15

Page 9: Lechazo Conf - Otogami - Web Scraping 101

Cómo

Cómo

‣Recopilando datos

‣Filtrando los datos

‣Organizando los datos

martes 28 de abril de 15

Page 10: Lechazo Conf - Otogami - Web Scraping 101

Cómo

Cómo

Recopilar datos:• Servicios web/API

• Feed

• FTP

• Web Scraping

martes 28 de abril de 15

Page 11: Lechazo Conf - Otogami - Web Scraping 101

Cómo

Web Scraping

‣Accede al contenido

‣Parsea el HTML

‣Interpreta el contenido

martes 28 de abril de 15

Page 12: Lechazo Conf - Otogami - Web Scraping 101

Cómo

Web Scraping

‣Accede al contenido

‣Parsea el HTML

‣Interpreta el contenido

martes 28 de abril de 15

Page 13: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

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

martes 28 de abril de 15

Page 14: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

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

martes 28 de abril de 15

Page 15: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

Parseo HTML

Estrategias:

‣El bueno

‣El feo

‣El malo

martes 28 de abril de 15

Page 16: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

El feo: “Machote”

‣Las herramientas son

para nenazas

‣Uso IndexOf y SubString

a saco

martes 28 de abril de 15

Page 17: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

El feo: “Machote”

martes 28 de abril de 15

Page 18: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

El malo: Expresiones Regulares

‣Son perfectas para buscar patrones!

‣Una expresión regular

para dominarlos a todos

martes 28 de abril de 15

Page 19: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

Expresiones Regulares

martes 28 de abril de 15

Page 20: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

Expresiones Regulares

Ahora tienes dos problemas

martes 28 de abril de 15

Page 21: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

Expresiones Regulares

RegEx

Jerarquia de Chomsky

HTML

martes 28 de abril de 15

Page 22: Lechazo Conf - Otogami - Web Scraping 101

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

Page 23: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

El bueno: DOM

Parsea el documento y construye el árbol DOM

martes 28 de abril de 15

Page 24: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

DOM

martes 28 de abril de 15

Page 25: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

DOM

martes 28 de abril de 15

Page 26: Lechazo Conf - Otogami - Web Scraping 101

Parseo HTML

DOM

‣Nekko

‣JSoup

martes 28 de abril de 15

Page 27: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 28: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 29: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Expresiones XPath

‣Expresiones JQuery

martes 28 de abril de 15

Page 30: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 31: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM‣ Developers Tools/Firebug es tu mejor amigo

martes 28 de abril de 15

Page 32: Lechazo Conf - Otogami - Web Scraping 101

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

Page 33: Lechazo Conf - Otogami - Web Scraping 101

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

Page 34: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Expresiones simples

‣Evitad elementos del framework CSS

martes 28 de abril de 15

Page 35: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Accede por id

‣Busca clases del CSS “semánticas”

no de estilo

martes 28 de abril de 15

Page 36: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Gracias Google por el marcado semántico!

martes 28 de abril de 15

Page 37: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM‣Especificación en http://schema.org

‣Busca facilitarle la vida a Google

‣Existe un schema para

todo lo que se os ocurra

martes 28 de abril de 15

Page 38: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 39: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 40: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Gracias RIA y Ajax!

martes 28 de abril de 15

Page 41: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 42: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 43: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

martes 28 de abril de 15

Page 44: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Datos en JavaScript del HTML

‣Datos en peticiones AJAX

martes 28 de abril de 15

Page 45: Lechazo Conf - Otogami - Web Scraping 101

Acceso al DOM

Acceso al DOM

‣Datos en JavaScript del HTML

‣Datos en peticiones AJAX

martes 28 de abril de 15

Page 46: Lechazo Conf - Otogami - Web Scraping 101

Tu código

Tu código

‣Abstrae, abstrae, abstrae! :)

‣Desacopla el fetch de la página de su procesamiento

‣Desacopla las páginas entre si cuando navegues de una a otra

‣Desacopla la construcción de tus DTOs de la

lógica de parseo del HTML

martes 28 de abril de 15

Page 47: Lechazo Conf - Otogami - Web Scraping 101

Tu código

Tu código

‣Una clase por página•getTitulo()•getPrecio()•getCostesDeEnvio()•getDisponibilidad()‣Cuidado con los bucles infinitos en los listados

paginados

martes 28 de abril de 15

Page 48: Lechazo Conf - Otogami - Web Scraping 101

Tu código

Tu código‣Asúmelo, cualquier campo al que accedas

algún día no vendrá y tendrás un “NPE”

‣Asúmelo, 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

Page 49: Lechazo Conf - Otogami - Web Scraping 101

Tu código

Tu código

‣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

Page 50: Lechazo Conf - Otogami - Web Scraping 101

Cómo

Recopila datos

‣Accede al contenido

‣Parsea el HTML

‣Interpreta el contenido

martes 28 de abril de 15

Page 51: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Accede al contenido‣Apréndete cómo funciona HTTP

martes 28 de abril de 15

Page 52: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Accede al contenido

‣Los distintos verbos:• GET

• POST

• PUT

• DELETE

‣Cómo van los parámetros en GET?

‣Cómo van los parámetros en POST?

martes 28 de abril de 15

Page 53: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

La request

martes 28 de abril de 15

Page 54: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

La request

Para paginar?!

martes 28 de abril de 15

Page 55: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Las cabeceras

martes 28 de abril de 15

Page 56: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Las cabeceras

‣Las cabeceras más importantes:

• User-Agent

• Accept

• Referer

• Cookie

martes 28 de abril de 15

Page 57: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

User Agent

‣El User Agent identifica:

• la aplicación (tipo)

• el sistema operativo

• motor de renderizado

• el navegador en sí

martes 28 de abril de 15

Page 58: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Accept

‣ Accept especifica qué formatos acepta el navegador:

• Texto: Html, Xml,..

• Imágenes: WebP

• Compresión y tipos (gzip, deflate,...)

• Idiomas del usuario

martes 28 de abril de 15

Page 59: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Referer

‣ Referer especifica al servidor desde qué URL se originó la petición actual

‣ El servidor puede condicionalmente modificar el resultado en función de su valor

martes 28 de abril de 15

Page 60: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Cookies

‣ Las cookies son variables que comparten el servidor

y el navegador, sin pasarse explícitamente

‣ Por tanto, guardan estado del usuario:

• Idioma

• Pais

• Moneda

• etc

martes 28 de abril de 15

Page 61: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

Cookies

‣ Las cookies son variables que comparten el servidor

y el navegador, sin pasarse explícitamente

‣ Por tanto, guardan estado del usuario:

• Idioma

• Pais

• Moneda

• etc

martes 28 de abril de 15

Page 62: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

La de sesión

martes 28 de abril de 15

Page 63: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

La de sesión

martes 28 de abril de 15

Page 64: Lechazo Conf - Otogami - Web Scraping 101

Accede al contenido

La de sesión

martes 28 de abril de 15

Page 65: Lechazo Conf - Otogami - Web Scraping 101

martes 28 de abril de 15

Page 66: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScriptmartes 28 de abril de 15

Page 67: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScript

Maldito JavaScript

‣ Hacer ingeniería inversa y calcular/simular en tu

código el resultado del JS

• Muy rápido en ejecución

• Pero muy frágil

• Si cambia la página tienes que volver a repetir la ingeniería inversa y reprogramar

martes 28 de abril de 15

Page 68: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScript

Maldito JavaScript‣ Ejecutar todo en un motor web de verdad:

• Levanta un “navegador” de verdad

• Lento y consume muchos recursos

• Más robusto ante un cambio

• Tú no tienes que tocar nada si cambia el JS

• ¡Es un entorno de ejecución real! Tienes fetch,

parseo, user agents, cookies, sesión, etc. Out Of The Box!

• Más difícil de configurar

martes 28 de abril de 15

Page 69: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScript

Maldito JavaScript

Capibara

WebDriver

martes 28 de abril de 15

Page 70: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScript

Maldito JavaScript

Capibara

WebDriver

martes 28 de abril de 15

Page 71: Lechazo Conf - Otogami - Web Scraping 101

Maldito JavaScript

¿Y en Saas?

kimonolabs

martes 28 de abril de 15

Page 72: Lechazo Conf - Otogami - Web Scraping 101

¿Y en Otogami?

¿Y en Otogami?

‣ 100% Java

‣ Implementa un navegador por completo:

• Navegación

• Aplica CSS

• Ejecuta JS

‣ Implementa WebDriver y es el driver más rápido

‣ Por defecto, no activamos el JS ni el CSS

martes 28 de abril de 15

Page 73: Lechazo Conf - Otogami - Web Scraping 101

¿Es legal?

¿Es legal?

Aunque puede que incumplas términos del acuerdo

con la web si tienes un acuerdo comercial con ellos

SImartes 28 de abril de 15