3. 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
5. el mejor motor de búsqueda y comparador de
ofertas de videojuegos
Qué
martes 28 de abril de 15
6. el mejor motor de búsqueda y comparador de
zapatillas y material deportivo
Qué
martes 28 de abril de 15
7. Qué
Qué
‣Proporcionar toda la información:
• Accesible
• Estructurada
• Sin ruido
• Actualizada
‣Dejar que el usuario elija
martes 28 de abril de 15
18. 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
31. Acceso al DOM
Acceso al DOM
‣ Developers Tools/Firebug es tu mejor amigo
martes 28 de abril de 15
32. 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
33. 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
34. Acceso al DOM
Acceso al DOM
‣Expresiones simples
‣Evitad elementos del framework CSS
martes 28 de abril de 15
35. Acceso al DOM
Acceso al DOM
‣Accede por id
‣Busca clases del CSS “semánticas”
no de estilo
martes 28 de abril de 15
36. Acceso al DOM
Acceso al DOM
‣Gracias Google por el marcado semántico!
martes 28 de abril de 15
37. 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
44. Acceso al DOM
Acceso al DOM
‣Datos en JavaScript del HTML
‣Datos en peticiones AJAX
martes 28 de abril de 15
45. Acceso al DOM
Acceso al DOM
‣Datos en JavaScript del HTML
‣Datos en peticiones AJAX
martes 28 de abril de 15
46. 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
47. 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
48. 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
49. 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
52. 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
56. Accede al contenido
Las cabeceras
‣Las cabeceras más importantes:
• User-Agent
• Accept
• Referer
• Cookie
martes 28 de abril de 15
57. 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
58. 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
59. 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
60. 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
61. 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
67. 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
68. 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
72. ¿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
73. ¿Es legal?
¿Es legal?
Aunque puede que incumplas términos del acuerdo
con la web si tienes un acuerdo comercial con ellos
SI
martes 28 de abril de 15