SlideShare a Scribd company logo
1 of 169
Scraping avanzado
o
Cómo hacer de internet
tu base de datos
by @estevecastells & @NachoMascort
Soy Esteve Castells
International SEO Specialist @
Softonic
Puedes encontrarme en
@estevecastells
https://estevecastells.com/
Newsletter: http://bit.ly/Seopatia
Hola!
Hola!
Soy Nacho Mascort
SEO Manager @ Grupo Planeta
Puedes encontrarme en:
@NachoMascort
https://seohacks.es
Puedes mirar mis scripts en:
https://github.com/NachoSEO
¿Qué vamos a ver?
1. ¿Qué es el scraping y para qué sirve?
2. Mitos sobre el scraping
3. Principales usos
a. En nuestro sitio web
b. En sitios web externos
4. Entendiendo el DOM
5. Métodos de extracción
6. Herramientas de Scraping
7. Scraping con Python
8. Tips
9. Casos prácticos
10. Bonus
by @estevecastells & @NachoMascort
1.
¿Qué es el scraping y para
qué sirve?
1.1 ¿Qué es el scraping?
El scraping o web scraping, es una técnica con la
que mediante software, se extrae información o
contenido de un sitio web.
Existen desde ‘scrapers’ sencillos que parsean el
HTML de un sitio web, a navegadores que
renderizan JS y realizan tareas de navegación y
extracción complejas.
1.2 ¿Para qué sirve?
Los usos del scraping son infinitos, solo los limitan tu
creatividad y la legalidad de tus acciones.
Los usos más básicos pueden ser comprobar
cambios en tu propia web o en la de un
competidor, hasta crear sitios webs dinámicos en
base a múltiples fuentes de datos.
2.
Mitos del Scraping
3.
Principales usos
3.1 Principales usos en nuestros sitios
web
Control del valor de ciertas etiquetas HTML
- ¿Están todos los elementos tal y como hemos
definido en nuestra documentación?
- Comprobaciones de deploys
- ¿Estamos mandando señales contradictorias?
- HTTP Headers
- Sitemaps vs metas
- Duplicidad de etiquetas
- Localización incorrecta de etiquetas
- Desaparición de etiquetas
3.2 Principales usos en sitios web
externos
● Automatizar procesos: lo que haría un
humano y te puedes ahorrar
○ Cambios visuales
■ ¿Están añadiendo funcionalidades
nuevas?
○ Cambios en el HTML (metas, etc)
■ ¿Están añadiendo nuevo marcaje
Schema o cambiando su estrategia de
indexación?
○ Cambios de contenido
■ ¿Actualizan/curan su contenido?
● Monitorizar cambios de rankings en Google
4.
Entendiendo el DOM
DOCUMENT
OBJECT
MODEL
Modelo de Objetos del Documento
4.1 Document Object Model
¿Qué es?
Es la representación estructural de un
documento.
Define la jerarquía de
cada elemento dentro
de cada página.
Depende de su
posición una etiqueta
puede ser:
● Child
● Parent
● Sibiling
(hermano)
4.1 Document Object Model
¿Componentes de una web?
Nuestro navegador hace una petición get hacia
el servidor y este nos devuelve varios archivos
para que el navegador lo pueda renderizar.
Estos archivos suelen ser:
➜ HTML
➜ CSS
➜ JS
➜ Imágenes
➜ ...
4.2 Código fuente vs DOM
Son dos cosas distintas.
Puedes consultar cualquier HTML de un site
escribiendo en la barra del navegador:
view-source: https://www.dominio.tld/ruta
*Con CSS y JS no hace falta porque el
navegador no los renderiza
** Ctrl / Cmd + u
¿Cual es el código
fuente?
¿Cual es el código
fuente?
>>> view-source:
4.2 Código fuente vs DOM
En el código fuente (source code) no se ha
ejecutado ningún JS.
Depende del comportamiento del JS puedes
obtener datos “falsos”.
4.2 Código fuente vs DOM
Si el código fuente no sirve, ¿qué hacemos?
Podemos “ver” el DOM en la pestaña
“Elements” en las herramientas de
desarrolladores de Chrome (y cualquier otro
navegador).
4.2 Código fuente vs DOM
4.2 Código fuente vs DOM
O pulsando F12
¡Los atajos molan más!
¿Qué aparece en el
DOM?
>>> F12
Podemos ver
cambios en tiempo
real
4.3 ¿Google que ve?
Experimento de hace algo más de un año:
La idea es modificar la etiqueta meta robots
(mediante JS) de una URL para desindexar la página
y ver si Google hace caso al valor que se encuentra
en el código fuente o en el DOM.
URL con la que experimentar:
https://seohacks.es/dashboard/
4.3 ¿Google que ve (experimento)?
Se añade el siguiente código:
<script>
jQuery('meta[name="robots"]').remove();
var meta = document.createElement('meta');
meta.name = 'robots';
meta.content = 'noindex, follow';
jQuery('head').append(meta);
</script>
4.3 ¿Google que ve (experimento)?
Lo que hace es:
1. Eliminar la etiqueta meta robots actual
4.3 ¿Google que ve (experimento)?
Lo que hace es:
1. Eliminar la etiqueta meta robots actual
2. Crea una variable llamada “meta” que
almacena la creación de un elemento tipo
“meta” (valga la redundancia)
4.3 ¿Google que ve (experimento)?
Lo que hace es:
1. Eliminar la etiqueta meta robots actual
2. Crea una variable llamada “meta” que
almacena la creación de un elemento tipo
“meta” (valga la redundancia)
3. Le añade los atributos “name” con valor
“robots” y “content” con valor “noindex, follow”
4.3 ¿Google que ve (experimento)?
Lo que hace es:
1. Eliminar la etiqueta meta robots actual
2. Crea una variable llamada “meta” que
almacena la creación de un elemento tipo
“meta” (valga la redundancia)
3. Le añade los atributos “name” con valor
“robots” y “content” con valor “noindex, follow”
4. Añade al head la variable meta que contiene la
etiqueta con los valores que provocan una
desindexación
4.3 ¿Google que ve (experimento)?
Transforma esto:
En esto:
4.3 Resultado
Más datos al respecto
https://www.searchviu.com/en/javascript-canonical-tags/
5.
Métodos de extracción
5. Métodos de extracción
Podemos extraer la información de cada documento
usando diferentes modelos bastante similares entre
sí.
5. Métodos de extracción
Podemos extraer la información de cada documento
usando diferentes modelos bastante similares entre
sí.
Estos son:
➜ Xpath
➜ Selectores de CSS
➜ Otros como regex o selectores de herramientas
específicas
5.1 Xpath
Emplea “expresiones de ruta” (path expressions)
para poder definir un nodo o varios dentro de un
documento
Podemos obtenerlos:
➜ Escribiendolos nosotros
➜ A través de las herramientas para
desarrolladores dentro de un navegador
5.1.1 Síntaxis de Xpath
El standard de escritura es el siguiente:
//etiqueta[@atributo=’valor’]
5.1.1 Síntaxis de Xpath
El standard de escritura es el siguiente:
//etiqueta[@atributo=’valor’]
Para esta etiqueta:
<input id=”seoplus” type=”submit” value=”Log In”/>
5.1.1 Síntaxis de Xpath
//etiqueta[@atributo=’valor’]
Para esta etiqueta:
<input id=”seoplus” type=”submit” value=”Log In”/>
➜ Etiqueta: input
5.1.1 Síntaxis de Xpath
//etiqueta[@atributo=’valor’]
Para esta etiqueta:
<input id=”seoplus” type=”submit” value=”Log In”/>
➜ Etiqueta: input
➜ Atributos:
○ Id
○ Type
○ Value
5.1.1 Síntaxis de Xpath
//etiqueta[@atributo=’valor’]
Para esta etiqueta:
<input id=”seoplus” type=”submit” value=”Log In”/>
➜ Etiqueta: input
➜ Atributos:
○ Id = seoplus
○ Type = Submit
○ Value = Log In
5.1.1 Síntaxis de Xpath
//input[@id=’seoplus’]
5.1.2 Dev Tools
5.1.2 Dev Tools
5.2 CSS Selectors
Tal y como indica su nombre son los mismos
selectores que usamos para escribir CSS.
Podemos obtenerlos:
➜ Escribiendolos nosotros con la misma sintaxis
que modificando los estilos de un site
➜ A través de las herramientas para
desarrolladores dentro de un navegador
*tip: para seleccionar etiqueta podemos usar la sintaxis de xpath y
eliminar el @ del atributo
5.2.1 Dev Tools
5.3 Xpath vs CSS
Xpath CSS
Direct Child //div/a div > a
Child o Subchild //div//a div a
ID //div[@id=”ejemplo”] #ejemplo
Clase //div[@clase=”ejemplo”] .ejemplo
Atributos //input[@name='username']
input[name='user
name']
https://saucelabs.com/resources/articles/selenium-tips-css-selectors
5.4 Otros
Podemos acceder a ciertos nodos del DOM
mediante otros métodos como:
➜ Regex
➜ Selectores específicos de librerías de python
➜ Herramientas adhoc
6.
Herramientas de Scraping
Algunas de las decenas de
herramientas que existen
Plugins
Herramientas varias
Scraper
Jason The Miner
Si no te convencen, aquí tienes más de 30 herramientas:
https://www.octoparse.com/blog/top-30-free-web-scraping-software/
Desde herramientas básicas o plugins que nos
sirven para hacer scrapings básicos, en algunos
casos para sacar datos más rápidamente sin
necesidad de sacar Python o JS a relucir a
herramientas un poco más ‘avanzadas’, aunque
todas tienen una curva de aprendizaje muy baja.
➜ Scraper
➜ Screaming Frog
➜ Google Sheets
➜ Grepsr
6.1 Herramientas de scraping
Scraper es una plugin de Google Chrome que
puedes usar para hacer pequeños scrapings de
elementos en un HTML mínimamente bien
estructurado.
También nos sirve para sacar el XPath cuando a
veces Google Chrome Dev Tools no lo saca bien
para utilizarlo en otras herramientas. Como punto a
favor, trabaja como Google Chrome Dev Tools sobre
DOM
6.1.1 Scraper
1. Doble clic
encima del
elemento que
queremos
sacar
2. Clicar en
‘Scrape
similar’
3. ¡Voilà!
6.1.1 Scraper
Si los elementos
están bien
estructurados,
podremos sacar
todo
extremadamente
fácilmente, sin
necesidad de
usar programas
terceros o
programación
6.1.1 Scraper
6.1.1 Scraper
Xpath para usarlo en otra
herramienta/
programación
6.1.1 Scraper
Listado de elementos
que vamos a sacar.
Soporta múltiples
columnas
6.1.1 Scraper
Copypaste fácil y
lo exportamos a
Excel
6.1.1 Scraper
Exportarlo
directamente a
Google Docs
con 1 clic
6.1.1 Scraper
Para scrapear
enlace o
enlace+texto
añadir “/a” al
final y “@href”
dependiendo
del caso
Screaming Frog es una de las herramientas SEO por
excelencia, que también nos puede servir para hacer
scraping básico (e incluso avanzado).
Al ser un crawler puedes usar Text only (HTML puro)
o JS rendering, si tu web usa client- side rendering.
Su modo de extracción es simple pero con él puedes
conseguir gran parte de lo que necesitarás hacer,
para lo otro puedes usar Python o otras
herramientas.
6.1.2 Screaming Frog
6.1.2 Screaming Frog
Configuration > Custom > Extraction
6.1.2 Screaming Frog
Tenemos varios modos.
- CSS path (CSS selector)
- XPath (el que usaremos
principalmente)
- Regex
6.1.2 Screaming Frog
Tenemos hasta 10 selectores,
que generalmente será
suficiente. Sino, nos tocará
usar Excel con la función
BUSCARV para juntar dos o
más scrapings
6.1.2 Screaming Frog
Deberemos luego decidir si
queremos extraer el
contenido dentro del HTML,
solo texto o el elemento
HTML entero
6.1.2 Screaming Frog
Una vez
tenemos todos
los extractores
puestos, tan
solo debemos
ejecutarlo, ya
sea en modo
crawler o modo
lista con un
sitemap.
6.1.2 Screaming Frog
Una vez tengamos configurado todo perfecto (a veces
tendremos que estar probando varias veces el XPath
correcto), ya podremos dejarlo crawleando y exportar los
datos obtenidos.
6.1.2 Screaming Frog
Algunos de los usos más habituales son, tanto en
webs originales como competidores.
➜ Monitorizar cambios/datos perdidos en un deploy
➜ Monitorizar cambios semanales en el contenido
de la web
➜ Comprobar aumento o decrecimiento de cantidad
o ratios de contenido/thin content
El límite del scraping con Screaming Frog.
Puedes hacer el 99% de las cosas que quieres (sacar
elementos on-page, etc) con JS-rendering fácil!
6.1.2 Screaming Frog
Cutre tip: Un uso ‘cutre’ para sacar todas las
URLs de un sitemap index es importando todo el
listado y limpiando con Excel luego. Por si no
sabes (aún) usar Python.
1. Nos vamos a Download
Sitemap index
2. Ponemos la URL del sitemap
index
6.1.2 Screaming Frog
3. Esperamos a que descargue
todo
4. Seleccionamos todo y hacemos
copypaste en Excel
6.1.2 Screaming Frog
Luego hacemos reemplazar con “Found “ y
tendremos todas las URLs limpias de un sitemap
index.
De esta manera podemos luego limpiar y sacar
por patrones de URL las que nos interesen. Ej:
una categoría, una tipología, que contengan X
palabra en la URL, etc.
De esa forma podremos segmentar incluso más
nuestro scraping ya sea de nuestra web o de la
web de un competidor.
6.1.3 Cloud version: FandangoSEO
Si necesitas correr crawls intensivos de millones de
páginas con segmentación por pagetype, con
FandangoSEO puedes poner XPaths interesantes con
extracción de contenido, count y exists.
6.1.4 Google Sheets
Con Google Sheets también podemos importar la
mayoría de elementos de una página web, desde HTML
hasta JSON con un pequeño script externo..
Pro’s:
➜ Importa HTML, CSV, TSV, XML, JSON y RSS.
➜ Hosteado en la nube
➜ Gratis y para toda la família
➜ Fácil de usar con funciones conocidas
Con’s:
➜ Se queda pillado fácilmente y suele tardar en
procesar miles de filas
6.1.4 Google Sheets
➜ Importando feeds fácilmente para crear tu
propio Feedly o agregador de noticias
6.1.5 Grepsr
Grepsr es una herramienta que se basa en una extensión
que facilita hacer la extracción de manera visual, además
ofrece exportar datos en formato csv o API (json)
Primero de todo instalaremos la extensión en Chrome y
la ejecutaremos, cargando la página deseada a scrapear.
6.1.5 Grepsr
Luego, haremos clic en ‘Select’ y seleccionaremos el
elemento exacto que queremos, haciendo hover con el
mouse podremos refinar.
6.1.5 Grepsr
Una vez
seleccionado, nos
quedará marcado
con el elemento y si
está bien
estructurado el
HTML, nos será muy
fácil sin tener que
sacar XPath o CSS
selectors.
6.1.5 Grepsr
Una vez seleccionadas todos nuestros campos, vamos a
proceder a guardarlos haciendo clic en Next, podemos
dar nombre a cada campo y extrarlo en forma de texto o
extraer la propia classe CSS.
6.1.5 Grepsr
Finalmente, podremos añadir paginación para cada uno
de nuestros campos, si así lo requieren, tanto en HTML
con un next link, así como si tiene load more o infinite
scroll (ajax)
6.1.5 Grepsr
6.1.5 Grepsr
Para seleccionar la paginación, seguiremos el mismo
proceso que con los elementos a scrapear.
(Parte opcional, no todo requiere de paginación)
6.1.5 Grepsr
Finalmente, también podremos configurar un login si es
necesario, así como campos adiccionales que tengan
cercanía al campo extraído (imágenes, metas, etc).
6.1.5 Grepsr
Finalmente, ya tendremos los datos tanto en formato
JSON como CSV. Eso sí, necesitaremos una cuenta
(gratis) en Grepsr para poder exportarlos!
7.
Scraping con Python
7 ¿Porque Python?
➜ Es un lenguaje muy sencillo de entender
➜ Fácil aproximación para los que empiezan con
la programación
➜ Mucho crecimiento y gran comunidad detrás
➜ Usos core para análisis de datos masivos y con
librerías muy potentes detrás (no solo de
scraping)
➜ ¡Podemos trabajar en el navegador!
○ https://colab.research.google.com
7.1 Tipos de datos
Para empezar a scrapear debemos conocer como
mínimo estos conceptos para programar en python:
➜ Variables
➜ Listas
➜ Integers, Floats, Strings, Boolean Values…
➜ Ciclos for
➜ Condicionales
➜ Librerías
7.2 Librerías para Scrapear
Existen varias pero me centraré en dos:
➜ Requests + BeautifulSoup: Para scrapear datos
del código fuente de un site. Útil para sites con
datos estáticos
➜ Selenium: Herramienta para automatizar que
nos puede ayudar a scrapear sites con
contenido dinámico cuyos valores están en el
DOM pero no en el código fuente.
*Colab no soporta selenium, tendremos que
trabajar con Jupyter (o cualquier IDE)
Con 5 líneas de código (o
menos) podéis ver el HTML
parseado
Acceder a cualquier elemento
del HTML parseado es
sencillo
Podemos crear un dataframe
y tratar la información al
gusto
O descargarla
7.3 Proceso
Analizamos el HTML, en
busca de patrones
Generamos el script
para un elemento o URL
Ampliamos para que
afecte a todos los datos
8.
Tips
Hay muchos sitios web que sirven sus páginas en
base al User-agent. Algunas veces te interesará ser
un dispositivo desktop, otro un móvil. A veces un
Windows, otro un Mac.
A veces un Googlebot, otras veces un bingbot.
¡Adapta cada scraping a lo que necesites para
obtener los resultados deseados!
8.1 User-agent
Para scrapear un sitio web como Google con
mecanismos avanzados de seguridad, será
necesario el uso de proxies, entre otras medidas.
Los proxies, hacen de intermediario entre una
petición que realiza un ordenador X a un servidor Z.
De esta forma, dejamos poco rastro a la hora de ser
identificados.
Depende del sitio web y número de peticiones se
recomienda usar una cantidad u otra. Por lo general,
más de una petición por segundo desde la misma IP
no es recomendable.
8.2 Proxies
Generalmente el uso de proxies es más
recomendable que un VPN, ya que el VPN hace lo
mismo pero bajo una única IP.
Siempre es recomendable usar un VPN con otra geo
para cualquier tipo de rastreo en webs de terceros,
para evitar posible problemas o identificaciones.
Además, si te capan por IP (ej: Cloudflare) nunca
más podrás acceder a la web desde esa IP (si es
estática).
Servicio VPN recomendado: ExpressVPN
8.3 VPN’s
La concurrency consiste en limitar el número de
peticiones que puede hacer una red por segundo.
Nos interesa limitar las peticiones que hacemos
siempre, para evitar saturar el servidor, ya sea el
nuestro o el de un competidor.
Si saturamos el servidor, deberemos volver a
realizar las peticiones o en según que caso, volver a
empezar todo el proceso de crawling
Números orientativos:
➜ Webs pequeñas: 5 req/seg - 5 hilos
➜ Webs grandes: 20 req/seg - 20 hilos
8.4 Concurrency
Es habitual que después de un scraping de datos,
nos encontramos con datos que no encajan.
Normalmente, tendremos que trabajar los datos
para limpiarlos.
Algunas de las correcciones más habituales:
➜ Duplicados
➜ Corrección/unificación de formatos
➜ Espacios
➜ Caracteres extraños
➜ Currencias
8.5 Data cleaning
9.
Casos prácticos
9. Casos prácticos
A continuación veremos 2 casos prácticos:
1. Utilizando el scraping para automatizar la
curación de contenidos para listados
2. Scrapeando para generar un feed de producto
para nuestras webs
Utilizando el scraping para
automatizar la curación de
contenidos para listados
9.1 Utilizando el scraping para
automatizar la curación de
contenidos para listados
Se puede decir con firmeza, que el mejor buscador
en la actualidad es Google.
¿Y si usamos los resultados de Google para generar
nuestros propios listados, basado en el ranking que
da él a webs que posicionan por lo que nosotros
queremos posicionar?
9.1.1 Jason The Miner
Para hacer esto, usaremos Jason The Miner, una
librería de scraping que ha hecho Marc Mignonsin,
Principal Software Engineer en Softonic
(@mawrkus) en Github y (@crossrecursion) en
Twitter
9.1.1 Jason The Miner
Jason The Miner es una librería basada en Node.js
versátil y modular que puede adaptarse a cualquier
web y necesidad
9.1.1 Jason The Miner
aa
9.1.2 Concepto
Lanzamos una query como
‘mejores lavadoras’.
Entraremos en top 20-30
resultados, analizaremos HTML
y extraemos la ID de los links
de Amazon.
Luego haremos un conteo y
estaremos validando
automáticamente en base a
decenas de webs cuál es la
mejor lavadora.
9.1.2 Concepto
Entonces, tendremos un listado
de IDs con su URL, que
podremos scrapear
directamente de Google Play o
usando su API, y rellenar semi-
automáticamente nuestro CMS
(WordPress, o lo que
tengamos).
Esto nos permite automatizar
la research/curación de
contenido y focalizarnos en
aportar realmente valor en lo
que escribimos.
9.1.3 Acción
Primero de todo vamos a generar la base para crear
la URL, con nuestro user-agent, así como el lenguaje
que nos interesa.
9.1.3 Acción
Luego vamos a generar una concurrencia máxima
para que Google no nos banee la IP o nos salten
captchas.
9.1.3 Acción
Finalmente, vamos a definir exactamente el flow del
crawler. Si necesita entrar en enlaces/webs, y qué
tiene que extraer de ellos.
9.1.3 Acción
Finalmente, vamos a transformar el output en un
archivo .json que podremos usar para subir a nuestro
CMS.
9.1.3 Acción
Y podemos incluso configurar que se suba
automáticamente al CMS una vez se han acabado
de ejecutar los procesos.
9.1.3 Acción
¿Qué hace Jason The Miner?
1. Load (HTTP, file, json, ...)
2. Parse (HTML w/ CSS by default)
3. Transform
Pero esto se nos queda corto,
necesitamos hacerlo en bulk para
decenas o centenares de casos, no
podemos hacerlo uno a uno.
9.1.3 Acción
Añadimos funcionalidad para que
funcione en bulk
1. Bulk (importado de un CSV)
2. Load (HTTP, file, json, ...)
3. Parse (HTML w/ CSS by default)
4. Transform
Creando una variable que sería la
query que insertamos en Google.
9.1.4 CMS
Una vez tenemos todos los datos insertados en
nuestro CMS, tendremos que ejecutar otro proceso
de scraping básico o con una API como la de
Amazon para sacar todos los datos de cada
producto (logo, nombre, imagenes, descripción,
etc).
Una vez lo tengamos todo, los listados ya estarán
ordenados y podemos añadir el contenido editorial
que queramos, con muy poco trabajo manual a
hacer.
9.1.5 Ideas
Ejemplos en los que se podría aplicar:
➜ Productos de Amazon
➜ Listados de restaurantes que están en
TripAdvisor
➜ Listados de hoteles
➜ Listados de películas en Netflix
➜ Mejores juegos de PS4
➜ Mejores apps de android
➜ Mejores apps de Chromecast
➜ Mejores libros
Scrapeando para generar un
feed de producto para
nuestras webs
9.2 Punto de partida
Web afiliada a Casa del Libro.
Necesitamos generar un feed de productos para
cada una de nuestras páginas de producto.
9.2 Proceso
Analizamos el HTML, en
busca de patrones
Generamos el script
para un elemento o URL
Ampliamos para que
afecte a todos los datos
9.2.0 ¿Qué queremos scrapear?
1. Necesitamos los siguientes datos:
a. Titulos
b. Autor
c. Editorial
d. Precios
*Solo de la categoría novela negra
9.2.0 ¿Qué queremos scrapear?
Titulo
9.2.0 ¿Qué queremos scrapear?
9.2.0 ¿Qué queremos scrapear?
Autor/a
9.2.0 ¿Qué queremos scrapear?
9.2.0 ¿Qué queremos scrapear?
1. Necesitamos los siguientes datos:
a. Titulos
b. Autor
c. Editorial
d. Precios
Editorial
9.2.0 ¿Qué queremos scrapear?
9.2.0 ¿Qué queremos scrapear?
1. Necesitamos los siguientes datos:
a. Titulos
b. Autor
c. Editorial
d. Precios Precio
9.2.0 ¿Qué queremos scrapear?
9.2.0 ¿Dónde encontramos lo que
queremos scrapear?
9.2.0 ¿Dónde encontramos lo que
queremos scrapear?
9.2.0 ¿Hay paginaciones?
Para cada paginación tendremos que iterar el
mismo código una y otra vez.
Hay que averiguar cómo se forman las URLs
paginadas para poder acceder a ellas:
>>>https://www.casadellibro.com/libros/novela-negra/126000000/p + pagina
9.2.1 Generamos el script para
extraer el primer libro
9.2.1 Iteramos en cada container
9.2.1 Es hora de finalizar
Ahora que ya tenemos el script para scrapear todos
los libros de la primera página vamos a generar el
script final para que afecte a todas las
paginaciones.
9.2.2 Hagamos el script
Importamos todas las librerías que vamos a usar
9.2.2 Hagamos el script
Creamos las listas en las que alojar cada uno de
los datos.
9.2.2 Hagamos el script
Tendremos una lista que contiene los números del
1 al 120 para las paginaciones
9.2.2 Hagamos el script
Creamos variables para evitar que el server nos
banee por exceso de peticiones
9.2.2 Hagamos el script
9.2.2 Hagamos el script
9.2.2 Hagamos el script
Con Pandas transformamos las listas en un
DataFrame que podemos trabajar
9.2.2 Hagamos el script
Con Pandas también podemos transformarlo en
un csv o en un excel
9.2.2 Hagamos el script
Y por último, podemos descargar el archivo
gracias a la librería de colab.
9.2.2 Hagamos el script
10.
Bonus
10.1 Sheet2Site
10.1 Sheet2Site
10.1 Sheet2Site
https://coinmarketcap.com/es/api/
Se puede utilizar Google Sheets para importar datos de APIs
fácilmente.
API’s como Dandelion API que sirven para hacer análisis de
semántica de textos, pueden ser muy útiles para el día a día de
nuestro SEO.
➜ Extracción de entidades
➜ Similaridad semántica
➜ Extracción de keywords
➜ Análisis de sentimentos
10.2 Dandelion API
Stack Andreas Niessen
Stack Proyectos Avanzados
10.3 Stacks de scraping + WP
+ +
+ ++
➜ Con este pequeño script podrás exportar toda una SERP
fácilmente en un CSV.
○ bit.ly/2uZCXuL
10.4 Scraping Google SERP
10.5 Scrapeando Google
10.6 Scrapeando + NLP
10.7 Scrapeando Breadcrumbs
10.8 Scrapeando Sitemaps
https://github.com/NachoSEO/extract_urls_from_sitemap_index
10.9 Traduciendo contenido
Python & Otros
➜ Chapter 11 – Web Scraping
https://automatetheboringstuff.com/chapter11/
➜ https://twitter.com/i/moments/949019183181856769
➜ Scraping ‘People Also Ask’ boxes for SEO and content
research
https://builtvisible.com/scraping-people-also-ask-boxes-for-seo-
and-content-research/
➜ https://stackoverflow.com/questions/3964681/find-all-files-in-a-
directory-with-extension-txt-in-python
➜ 6 Actionable Web Scraping Hacks for White Hat Marketers
https://ahrefs.com/blog/web-scraping-for-marketers/
➜ https://saucelabs.com/resources/articles/selenium-tips-css-
selectors
RECURSOS ADICIONALES
RECURSOS ADICIONALES
Node.js (Thanks @mawrkus)
➜ Web Scraping With Node.js:
https://www.smashingmagazine.com/2015/04/web-scraping-with-
nodejs/
➜ X-ray, The next web scraper. See through the noise:
https://github.com/lapwinglabs/x-ray
➜ Simple, lightweight & expressive web scraping with Node.js:
https://github.com/eeshi/node-scrapy
➜ Node.js Scraping Libraries: http://blog.webkid.io/nodejs-scraping-
libraries/
➜ https://www.scrapesentry.com/scraping-wiki/web-scraping-legal-or-
illegal/
➜ http://blog.icreon.us/web-scraping-and-you-a-legal-primer-for-one-of-
its-most-useful-tools/
➜ Web scraping o rastreo de webs y legalidad:
https://www.youtube.com/watch?v=EJzugD0l0Bw
¿QUIERES TRABAJAR CON ESTEVE EN SOFTONIC?
➜ Mail: esteve.castells@softonic.com
➜ LinkedIn: Esteve Castells
➜ Twitter: @estevecastells
CREDITS
➜ Presentation template by SlidesCarnival
➜ Photographs by Death to the Stock Photo
(license)
➜ Marc Mignonsin for creating Jason The Miner
¡Gracias!
¿Alguna pregunta?
Esteve Castells | @estevecastells
Newsletter: bit.ly/Seopatia
https://estevecastells.com/
Nacho Mascort | @NachoMascort
Scripts: https://github.com/NachoSEO
https://seohacks.es

More Related Content

What's hot

I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
DirkjanMollema
 
Tecnicas de estimacion de software
Tecnicas de estimacion de softwareTecnicas de estimacion de software
Tecnicas de estimacion de software
Ades27
 
Ejemplo de proy ti.pdf
Ejemplo de proy ti.pdfEjemplo de proy ti.pdf
Ejemplo de proy ti.pdf
mariela2906
 

What's hot (20)

Code Review Best Practices
Code Review Best PracticesCode Review Best Practices
Code Review Best Practices
 
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
I'm in your cloud... reading everyone's email. Hacking Azure AD via Active Di...
 
Estrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareEstrategias de Pruebas de Software
Estrategias de Pruebas de Software
 
Tecnicas de estimacion de software
Tecnicas de estimacion de softwareTecnicas de estimacion de software
Tecnicas de estimacion de software
 
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
"15 Technique to Exploit File Upload Pages", Ebrahim Hegazy
 
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
XSS Attacks Exploiting XSS Filter by Masato Kinugawa - CODE BLUE 2015
 
Ejemplo de proy ti.pdf
Ejemplo de proy ti.pdfEjemplo de proy ti.pdf
Ejemplo de proy ti.pdf
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios php
 
Secure coding in C#
Secure coding in C#Secure coding in C#
Secure coding in C#
 
Diagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, AsistenciaDiagrama de actividades inscripcion, evaluacion, Asistencia
Diagrama de actividades inscripcion, evaluacion, Asistencia
 
Tipos de pruebas
Tipos de pruebasTipos de pruebas
Tipos de pruebas
 
Aseguramiento de la calidad en software III
Aseguramiento de la calidad en software IIIAseguramiento de la calidad en software III
Aseguramiento de la calidad en software III
 
Calidad en el desarrollo del software
Calidad en el desarrollo del softwareCalidad en el desarrollo del software
Calidad en el desarrollo del software
 
Documentación de Software
Documentación de Software Documentación de Software
Documentación de Software
 
Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the book
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelines
 
Metodologias xp
Metodologias xpMetodologias xp
Metodologias xp
 
Ejemplo de Archimate. Depositario Central de Valores en México
Ejemplo de Archimate. Depositario Central de Valores en MéxicoEjemplo de Archimate. Depositario Central de Valores en México
Ejemplo de Archimate. Depositario Central de Valores en México
 
Plan de Pruebas
Plan de PruebasPlan de Pruebas
Plan de Pruebas
 

Similar to Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018

Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
Adrià Solé Orrit
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
Ian Monge Pérez
 

Similar to Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018 (20)

Taller de Screaming Frog con Rubén Merino
Taller de Screaming Frog con Rubén MerinoTaller de Screaming Frog con Rubén Merino
Taller de Screaming Frog con Rubén Merino
 
Análisis de Contenidos y Competencia: Screaming Frog y Xpath #SeoDay
Análisis de Contenidos y Competencia: Screaming Frog y Xpath #SeoDayAnálisis de Contenidos y Competencia: Screaming Frog y Xpath #SeoDay
Análisis de Contenidos y Competencia: Screaming Frog y Xpath #SeoDay
 
HTML5 Nuevas Etiquetas Semanticas
HTML5 Nuevas Etiquetas SemanticasHTML5 Nuevas Etiquetas Semanticas
HTML5 Nuevas Etiquetas Semanticas
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
2_4_Los_metadatos_El_elemento_head.pdf
2_4_Los_metadatos_El_elemento_head.pdf2_4_Los_metadatos_El_elemento_head.pdf
2_4_Los_metadatos_El_elemento_head.pdf
 
Diseño web
Diseño webDiseño web
Diseño web
 
Guia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt GudeGuia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt Gude
 
Diseño web
Diseño webDiseño web
Diseño web
 
Cómo configurar el seo de tu drupal
Cómo configurar el seo de tu drupal  Cómo configurar el seo de tu drupal
Cómo configurar el seo de tu drupal
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
Guía básica para pegarle al xhtml (Primera parte)
Guía básica para pegarle al xhtml (Primera parte)Guía básica para pegarle al xhtml (Primera parte)
Guía básica para pegarle al xhtml (Primera parte)
 
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
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Django
DjangoDjango
Django
 
Diseño web
Diseño webDiseño web
Diseño web
 
Diseño web
Diseño webDiseño web
Diseño web
 
Html4
Html4Html4
Html4
 
Presentación RodrigoPolo.com @ Barcamp Guatemala '09
Presentación RodrigoPolo.com @ Barcamp Guatemala '09Presentación RodrigoPolo.com @ Barcamp Guatemala '09
Presentación RodrigoPolo.com @ Barcamp Guatemala '09
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Beneficios del HTML5 al SEO de una web - Montiu Noviembre 2013
Beneficios del HTML5 al SEO de una web - Montiu Noviembre 2013Beneficios del HTML5 al SEO de una web - Montiu Noviembre 2013
Beneficios del HTML5 al SEO de una web - Montiu Noviembre 2013
 

Recently uploaded

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
Yanitza28
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
Marc Liust
 

Recently uploaded (18)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 

Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018

  • 1. Scraping avanzado o Cómo hacer de internet tu base de datos by @estevecastells & @NachoMascort
  • 2. Soy Esteve Castells International SEO Specialist @ Softonic Puedes encontrarme en @estevecastells https://estevecastells.com/ Newsletter: http://bit.ly/Seopatia Hola!
  • 3. Hola! Soy Nacho Mascort SEO Manager @ Grupo Planeta Puedes encontrarme en: @NachoMascort https://seohacks.es Puedes mirar mis scripts en: https://github.com/NachoSEO
  • 4. ¿Qué vamos a ver? 1. ¿Qué es el scraping y para qué sirve? 2. Mitos sobre el scraping 3. Principales usos a. En nuestro sitio web b. En sitios web externos 4. Entendiendo el DOM 5. Métodos de extracción 6. Herramientas de Scraping 7. Scraping con Python 8. Tips 9. Casos prácticos 10. Bonus by @estevecastells & @NachoMascort
  • 5. 1. ¿Qué es el scraping y para qué sirve?
  • 6. 1.1 ¿Qué es el scraping? El scraping o web scraping, es una técnica con la que mediante software, se extrae información o contenido de un sitio web. Existen desde ‘scrapers’ sencillos que parsean el HTML de un sitio web, a navegadores que renderizan JS y realizan tareas de navegación y extracción complejas.
  • 7. 1.2 ¿Para qué sirve? Los usos del scraping son infinitos, solo los limitan tu creatividad y la legalidad de tus acciones. Los usos más básicos pueden ser comprobar cambios en tu propia web o en la de un competidor, hasta crear sitios webs dinámicos en base a múltiples fuentes de datos.
  • 9.
  • 10.
  • 11.
  • 13. 3.1 Principales usos en nuestros sitios web Control del valor de ciertas etiquetas HTML - ¿Están todos los elementos tal y como hemos definido en nuestra documentación? - Comprobaciones de deploys - ¿Estamos mandando señales contradictorias? - HTTP Headers - Sitemaps vs metas - Duplicidad de etiquetas - Localización incorrecta de etiquetas - Desaparición de etiquetas
  • 14. 3.2 Principales usos en sitios web externos ● Automatizar procesos: lo que haría un humano y te puedes ahorrar ○ Cambios visuales ■ ¿Están añadiendo funcionalidades nuevas? ○ Cambios en el HTML (metas, etc) ■ ¿Están añadiendo nuevo marcaje Schema o cambiando su estrategia de indexación? ○ Cambios de contenido ■ ¿Actualizan/curan su contenido? ● Monitorizar cambios de rankings en Google
  • 17. 4.1 Document Object Model ¿Qué es? Es la representación estructural de un documento.
  • 18. Define la jerarquía de cada elemento dentro de cada página.
  • 19. Depende de su posición una etiqueta puede ser: ● Child ● Parent ● Sibiling (hermano)
  • 20. 4.1 Document Object Model ¿Componentes de una web? Nuestro navegador hace una petición get hacia el servidor y este nos devuelve varios archivos para que el navegador lo pueda renderizar. Estos archivos suelen ser: ➜ HTML ➜ CSS ➜ JS ➜ Imágenes ➜ ...
  • 21. 4.2 Código fuente vs DOM Son dos cosas distintas. Puedes consultar cualquier HTML de un site escribiendo en la barra del navegador: view-source: https://www.dominio.tld/ruta *Con CSS y JS no hace falta porque el navegador no los renderiza ** Ctrl / Cmd + u
  • 22. ¿Cual es el código fuente?
  • 23. ¿Cual es el código fuente? >>> view-source:
  • 24. 4.2 Código fuente vs DOM En el código fuente (source code) no se ha ejecutado ningún JS. Depende del comportamiento del JS puedes obtener datos “falsos”.
  • 25. 4.2 Código fuente vs DOM Si el código fuente no sirve, ¿qué hacemos? Podemos “ver” el DOM en la pestaña “Elements” en las herramientas de desarrolladores de Chrome (y cualquier otro navegador).
  • 27. 4.2 Código fuente vs DOM O pulsando F12 ¡Los atajos molan más!
  • 28. ¿Qué aparece en el DOM? >>> F12
  • 29. Podemos ver cambios en tiempo real
  • 30. 4.3 ¿Google que ve? Experimento de hace algo más de un año: La idea es modificar la etiqueta meta robots (mediante JS) de una URL para desindexar la página y ver si Google hace caso al valor que se encuentra en el código fuente o en el DOM. URL con la que experimentar: https://seohacks.es/dashboard/
  • 31. 4.3 ¿Google que ve (experimento)? Se añade el siguiente código: <script> jQuery('meta[name="robots"]').remove(); var meta = document.createElement('meta'); meta.name = 'robots'; meta.content = 'noindex, follow'; jQuery('head').append(meta); </script>
  • 32. 4.3 ¿Google que ve (experimento)? Lo que hace es: 1. Eliminar la etiqueta meta robots actual
  • 33. 4.3 ¿Google que ve (experimento)? Lo que hace es: 1. Eliminar la etiqueta meta robots actual 2. Crea una variable llamada “meta” que almacena la creación de un elemento tipo “meta” (valga la redundancia)
  • 34. 4.3 ¿Google que ve (experimento)? Lo que hace es: 1. Eliminar la etiqueta meta robots actual 2. Crea una variable llamada “meta” que almacena la creación de un elemento tipo “meta” (valga la redundancia) 3. Le añade los atributos “name” con valor “robots” y “content” con valor “noindex, follow”
  • 35. 4.3 ¿Google que ve (experimento)? Lo que hace es: 1. Eliminar la etiqueta meta robots actual 2. Crea una variable llamada “meta” que almacena la creación de un elemento tipo “meta” (valga la redundancia) 3. Le añade los atributos “name” con valor “robots” y “content” con valor “noindex, follow” 4. Añade al head la variable meta que contiene la etiqueta con los valores que provocan una desindexación
  • 36. 4.3 ¿Google que ve (experimento)? Transforma esto: En esto:
  • 38. Más datos al respecto https://www.searchviu.com/en/javascript-canonical-tags/
  • 40. 5. Métodos de extracción Podemos extraer la información de cada documento usando diferentes modelos bastante similares entre sí.
  • 41. 5. Métodos de extracción Podemos extraer la información de cada documento usando diferentes modelos bastante similares entre sí. Estos son: ➜ Xpath ➜ Selectores de CSS ➜ Otros como regex o selectores de herramientas específicas
  • 42. 5.1 Xpath Emplea “expresiones de ruta” (path expressions) para poder definir un nodo o varios dentro de un documento Podemos obtenerlos: ➜ Escribiendolos nosotros ➜ A través de las herramientas para desarrolladores dentro de un navegador
  • 43. 5.1.1 Síntaxis de Xpath El standard de escritura es el siguiente: //etiqueta[@atributo=’valor’]
  • 44. 5.1.1 Síntaxis de Xpath El standard de escritura es el siguiente: //etiqueta[@atributo=’valor’] Para esta etiqueta: <input id=”seoplus” type=”submit” value=”Log In”/>
  • 45. 5.1.1 Síntaxis de Xpath //etiqueta[@atributo=’valor’] Para esta etiqueta: <input id=”seoplus” type=”submit” value=”Log In”/> ➜ Etiqueta: input
  • 46. 5.1.1 Síntaxis de Xpath //etiqueta[@atributo=’valor’] Para esta etiqueta: <input id=”seoplus” type=”submit” value=”Log In”/> ➜ Etiqueta: input ➜ Atributos: ○ Id ○ Type ○ Value
  • 47. 5.1.1 Síntaxis de Xpath //etiqueta[@atributo=’valor’] Para esta etiqueta: <input id=”seoplus” type=”submit” value=”Log In”/> ➜ Etiqueta: input ➜ Atributos: ○ Id = seoplus ○ Type = Submit ○ Value = Log In
  • 48. 5.1.1 Síntaxis de Xpath //input[@id=’seoplus’]
  • 51. 5.2 CSS Selectors Tal y como indica su nombre son los mismos selectores que usamos para escribir CSS. Podemos obtenerlos: ➜ Escribiendolos nosotros con la misma sintaxis que modificando los estilos de un site ➜ A través de las herramientas para desarrolladores dentro de un navegador *tip: para seleccionar etiqueta podemos usar la sintaxis de xpath y eliminar el @ del atributo
  • 53. 5.3 Xpath vs CSS Xpath CSS Direct Child //div/a div > a Child o Subchild //div//a div a ID //div[@id=”ejemplo”] #ejemplo Clase //div[@clase=”ejemplo”] .ejemplo Atributos //input[@name='username'] input[name='user name'] https://saucelabs.com/resources/articles/selenium-tips-css-selectors
  • 54. 5.4 Otros Podemos acceder a ciertos nodos del DOM mediante otros métodos como: ➜ Regex ➜ Selectores específicos de librerías de python ➜ Herramientas adhoc
  • 56. Algunas de las decenas de herramientas que existen Plugins Herramientas varias Scraper Jason The Miner Si no te convencen, aquí tienes más de 30 herramientas: https://www.octoparse.com/blog/top-30-free-web-scraping-software/
  • 57. Desde herramientas básicas o plugins que nos sirven para hacer scrapings básicos, en algunos casos para sacar datos más rápidamente sin necesidad de sacar Python o JS a relucir a herramientas un poco más ‘avanzadas’, aunque todas tienen una curva de aprendizaje muy baja. ➜ Scraper ➜ Screaming Frog ➜ Google Sheets ➜ Grepsr 6.1 Herramientas de scraping
  • 58. Scraper es una plugin de Google Chrome que puedes usar para hacer pequeños scrapings de elementos en un HTML mínimamente bien estructurado. También nos sirve para sacar el XPath cuando a veces Google Chrome Dev Tools no lo saca bien para utilizarlo en otras herramientas. Como punto a favor, trabaja como Google Chrome Dev Tools sobre DOM 6.1.1 Scraper
  • 59. 1. Doble clic encima del elemento que queremos sacar 2. Clicar en ‘Scrape similar’ 3. ¡Voilà! 6.1.1 Scraper
  • 60. Si los elementos están bien estructurados, podremos sacar todo extremadamente fácilmente, sin necesidad de usar programas terceros o programación 6.1.1 Scraper
  • 61. 6.1.1 Scraper Xpath para usarlo en otra herramienta/ programación
  • 62. 6.1.1 Scraper Listado de elementos que vamos a sacar. Soporta múltiples columnas
  • 63. 6.1.1 Scraper Copypaste fácil y lo exportamos a Excel
  • 65. 6.1.1 Scraper Para scrapear enlace o enlace+texto añadir “/a” al final y “@href” dependiendo del caso
  • 66. Screaming Frog es una de las herramientas SEO por excelencia, que también nos puede servir para hacer scraping básico (e incluso avanzado). Al ser un crawler puedes usar Text only (HTML puro) o JS rendering, si tu web usa client- side rendering. Su modo de extracción es simple pero con él puedes conseguir gran parte de lo que necesitarás hacer, para lo otro puedes usar Python o otras herramientas. 6.1.2 Screaming Frog
  • 67. 6.1.2 Screaming Frog Configuration > Custom > Extraction
  • 68. 6.1.2 Screaming Frog Tenemos varios modos. - CSS path (CSS selector) - XPath (el que usaremos principalmente) - Regex
  • 69. 6.1.2 Screaming Frog Tenemos hasta 10 selectores, que generalmente será suficiente. Sino, nos tocará usar Excel con la función BUSCARV para juntar dos o más scrapings
  • 70. 6.1.2 Screaming Frog Deberemos luego decidir si queremos extraer el contenido dentro del HTML, solo texto o el elemento HTML entero
  • 71. 6.1.2 Screaming Frog Una vez tenemos todos los extractores puestos, tan solo debemos ejecutarlo, ya sea en modo crawler o modo lista con un sitemap.
  • 72. 6.1.2 Screaming Frog Una vez tengamos configurado todo perfecto (a veces tendremos que estar probando varias veces el XPath correcto), ya podremos dejarlo crawleando y exportar los datos obtenidos.
  • 73. 6.1.2 Screaming Frog Algunos de los usos más habituales son, tanto en webs originales como competidores. ➜ Monitorizar cambios/datos perdidos en un deploy ➜ Monitorizar cambios semanales en el contenido de la web ➜ Comprobar aumento o decrecimiento de cantidad o ratios de contenido/thin content El límite del scraping con Screaming Frog. Puedes hacer el 99% de las cosas que quieres (sacar elementos on-page, etc) con JS-rendering fácil!
  • 74. 6.1.2 Screaming Frog Cutre tip: Un uso ‘cutre’ para sacar todas las URLs de un sitemap index es importando todo el listado y limpiando con Excel luego. Por si no sabes (aún) usar Python. 1. Nos vamos a Download Sitemap index 2. Ponemos la URL del sitemap index
  • 75. 6.1.2 Screaming Frog 3. Esperamos a que descargue todo 4. Seleccionamos todo y hacemos copypaste en Excel
  • 76. 6.1.2 Screaming Frog Luego hacemos reemplazar con “Found “ y tendremos todas las URLs limpias de un sitemap index. De esta manera podemos luego limpiar y sacar por patrones de URL las que nos interesen. Ej: una categoría, una tipología, que contengan X palabra en la URL, etc. De esa forma podremos segmentar incluso más nuestro scraping ya sea de nuestra web o de la web de un competidor.
  • 77. 6.1.3 Cloud version: FandangoSEO Si necesitas correr crawls intensivos de millones de páginas con segmentación por pagetype, con FandangoSEO puedes poner XPaths interesantes con extracción de contenido, count y exists.
  • 78. 6.1.4 Google Sheets Con Google Sheets también podemos importar la mayoría de elementos de una página web, desde HTML hasta JSON con un pequeño script externo.. Pro’s: ➜ Importa HTML, CSV, TSV, XML, JSON y RSS. ➜ Hosteado en la nube ➜ Gratis y para toda la família ➜ Fácil de usar con funciones conocidas Con’s: ➜ Se queda pillado fácilmente y suele tardar en procesar miles de filas
  • 79. 6.1.4 Google Sheets ➜ Importando feeds fácilmente para crear tu propio Feedly o agregador de noticias
  • 80. 6.1.5 Grepsr Grepsr es una herramienta que se basa en una extensión que facilita hacer la extracción de manera visual, además ofrece exportar datos en formato csv o API (json)
  • 81. Primero de todo instalaremos la extensión en Chrome y la ejecutaremos, cargando la página deseada a scrapear. 6.1.5 Grepsr
  • 82. Luego, haremos clic en ‘Select’ y seleccionaremos el elemento exacto que queremos, haciendo hover con el mouse podremos refinar. 6.1.5 Grepsr
  • 83. Una vez seleccionado, nos quedará marcado con el elemento y si está bien estructurado el HTML, nos será muy fácil sin tener que sacar XPath o CSS selectors. 6.1.5 Grepsr
  • 84. Una vez seleccionadas todos nuestros campos, vamos a proceder a guardarlos haciendo clic en Next, podemos dar nombre a cada campo y extrarlo en forma de texto o extraer la propia classe CSS. 6.1.5 Grepsr
  • 85. Finalmente, podremos añadir paginación para cada uno de nuestros campos, si así lo requieren, tanto en HTML con un next link, así como si tiene load more o infinite scroll (ajax) 6.1.5 Grepsr
  • 86. 6.1.5 Grepsr Para seleccionar la paginación, seguiremos el mismo proceso que con los elementos a scrapear. (Parte opcional, no todo requiere de paginación)
  • 87. 6.1.5 Grepsr Finalmente, también podremos configurar un login si es necesario, así como campos adiccionales que tengan cercanía al campo extraído (imágenes, metas, etc).
  • 88. 6.1.5 Grepsr Finalmente, ya tendremos los datos tanto en formato JSON como CSV. Eso sí, necesitaremos una cuenta (gratis) en Grepsr para poder exportarlos!
  • 90.
  • 91. 7 ¿Porque Python? ➜ Es un lenguaje muy sencillo de entender ➜ Fácil aproximación para los que empiezan con la programación ➜ Mucho crecimiento y gran comunidad detrás ➜ Usos core para análisis de datos masivos y con librerías muy potentes detrás (no solo de scraping) ➜ ¡Podemos trabajar en el navegador! ○ https://colab.research.google.com
  • 92. 7.1 Tipos de datos Para empezar a scrapear debemos conocer como mínimo estos conceptos para programar en python: ➜ Variables ➜ Listas ➜ Integers, Floats, Strings, Boolean Values… ➜ Ciclos for ➜ Condicionales ➜ Librerías
  • 93. 7.2 Librerías para Scrapear Existen varias pero me centraré en dos: ➜ Requests + BeautifulSoup: Para scrapear datos del código fuente de un site. Útil para sites con datos estáticos ➜ Selenium: Herramienta para automatizar que nos puede ayudar a scrapear sites con contenido dinámico cuyos valores están en el DOM pero no en el código fuente. *Colab no soporta selenium, tendremos que trabajar con Jupyter (o cualquier IDE)
  • 94.
  • 95. Con 5 líneas de código (o menos) podéis ver el HTML parseado
  • 96. Acceder a cualquier elemento del HTML parseado es sencillo
  • 97. Podemos crear un dataframe y tratar la información al gusto
  • 99.
  • 100. 7.3 Proceso Analizamos el HTML, en busca de patrones Generamos el script para un elemento o URL Ampliamos para que afecte a todos los datos
  • 102. Hay muchos sitios web que sirven sus páginas en base al User-agent. Algunas veces te interesará ser un dispositivo desktop, otro un móvil. A veces un Windows, otro un Mac. A veces un Googlebot, otras veces un bingbot. ¡Adapta cada scraping a lo que necesites para obtener los resultados deseados! 8.1 User-agent
  • 103. Para scrapear un sitio web como Google con mecanismos avanzados de seguridad, será necesario el uso de proxies, entre otras medidas. Los proxies, hacen de intermediario entre una petición que realiza un ordenador X a un servidor Z. De esta forma, dejamos poco rastro a la hora de ser identificados. Depende del sitio web y número de peticiones se recomienda usar una cantidad u otra. Por lo general, más de una petición por segundo desde la misma IP no es recomendable. 8.2 Proxies
  • 104. Generalmente el uso de proxies es más recomendable que un VPN, ya que el VPN hace lo mismo pero bajo una única IP. Siempre es recomendable usar un VPN con otra geo para cualquier tipo de rastreo en webs de terceros, para evitar posible problemas o identificaciones. Además, si te capan por IP (ej: Cloudflare) nunca más podrás acceder a la web desde esa IP (si es estática). Servicio VPN recomendado: ExpressVPN 8.3 VPN’s
  • 105. La concurrency consiste en limitar el número de peticiones que puede hacer una red por segundo. Nos interesa limitar las peticiones que hacemos siempre, para evitar saturar el servidor, ya sea el nuestro o el de un competidor. Si saturamos el servidor, deberemos volver a realizar las peticiones o en según que caso, volver a empezar todo el proceso de crawling Números orientativos: ➜ Webs pequeñas: 5 req/seg - 5 hilos ➜ Webs grandes: 20 req/seg - 20 hilos 8.4 Concurrency
  • 106. Es habitual que después de un scraping de datos, nos encontramos con datos que no encajan. Normalmente, tendremos que trabajar los datos para limpiarlos. Algunas de las correcciones más habituales: ➜ Duplicados ➜ Corrección/unificación de formatos ➜ Espacios ➜ Caracteres extraños ➜ Currencias 8.5 Data cleaning
  • 108. 9. Casos prácticos A continuación veremos 2 casos prácticos: 1. Utilizando el scraping para automatizar la curación de contenidos para listados 2. Scrapeando para generar un feed de producto para nuestras webs
  • 109. Utilizando el scraping para automatizar la curación de contenidos para listados
  • 110. 9.1 Utilizando el scraping para automatizar la curación de contenidos para listados Se puede decir con firmeza, que el mejor buscador en la actualidad es Google. ¿Y si usamos los resultados de Google para generar nuestros propios listados, basado en el ranking que da él a webs que posicionan por lo que nosotros queremos posicionar?
  • 111. 9.1.1 Jason The Miner Para hacer esto, usaremos Jason The Miner, una librería de scraping que ha hecho Marc Mignonsin, Principal Software Engineer en Softonic (@mawrkus) en Github y (@crossrecursion) en Twitter
  • 112. 9.1.1 Jason The Miner Jason The Miner es una librería basada en Node.js versátil y modular que puede adaptarse a cualquier web y necesidad
  • 113. 9.1.1 Jason The Miner aa
  • 114. 9.1.2 Concepto Lanzamos una query como ‘mejores lavadoras’. Entraremos en top 20-30 resultados, analizaremos HTML y extraemos la ID de los links de Amazon. Luego haremos un conteo y estaremos validando automáticamente en base a decenas de webs cuál es la mejor lavadora.
  • 115. 9.1.2 Concepto Entonces, tendremos un listado de IDs con su URL, que podremos scrapear directamente de Google Play o usando su API, y rellenar semi- automáticamente nuestro CMS (WordPress, o lo que tengamos). Esto nos permite automatizar la research/curación de contenido y focalizarnos en aportar realmente valor en lo que escribimos.
  • 116. 9.1.3 Acción Primero de todo vamos a generar la base para crear la URL, con nuestro user-agent, así como el lenguaje que nos interesa.
  • 117. 9.1.3 Acción Luego vamos a generar una concurrencia máxima para que Google no nos banee la IP o nos salten captchas.
  • 118. 9.1.3 Acción Finalmente, vamos a definir exactamente el flow del crawler. Si necesita entrar en enlaces/webs, y qué tiene que extraer de ellos.
  • 119. 9.1.3 Acción Finalmente, vamos a transformar el output en un archivo .json que podremos usar para subir a nuestro CMS.
  • 120. 9.1.3 Acción Y podemos incluso configurar que se suba automáticamente al CMS una vez se han acabado de ejecutar los procesos.
  • 121. 9.1.3 Acción ¿Qué hace Jason The Miner? 1. Load (HTTP, file, json, ...) 2. Parse (HTML w/ CSS by default) 3. Transform Pero esto se nos queda corto, necesitamos hacerlo en bulk para decenas o centenares de casos, no podemos hacerlo uno a uno.
  • 122. 9.1.3 Acción Añadimos funcionalidad para que funcione en bulk 1. Bulk (importado de un CSV) 2. Load (HTTP, file, json, ...) 3. Parse (HTML w/ CSS by default) 4. Transform Creando una variable que sería la query que insertamos en Google.
  • 123. 9.1.4 CMS Una vez tenemos todos los datos insertados en nuestro CMS, tendremos que ejecutar otro proceso de scraping básico o con una API como la de Amazon para sacar todos los datos de cada producto (logo, nombre, imagenes, descripción, etc). Una vez lo tengamos todo, los listados ya estarán ordenados y podemos añadir el contenido editorial que queramos, con muy poco trabajo manual a hacer.
  • 124. 9.1.5 Ideas Ejemplos en los que se podría aplicar: ➜ Productos de Amazon ➜ Listados de restaurantes que están en TripAdvisor ➜ Listados de hoteles ➜ Listados de películas en Netflix ➜ Mejores juegos de PS4 ➜ Mejores apps de android ➜ Mejores apps de Chromecast ➜ Mejores libros
  • 125. Scrapeando para generar un feed de producto para nuestras webs
  • 126. 9.2 Punto de partida Web afiliada a Casa del Libro. Necesitamos generar un feed de productos para cada una de nuestras páginas de producto.
  • 127. 9.2 Proceso Analizamos el HTML, en busca de patrones Generamos el script para un elemento o URL Ampliamos para que afecte a todos los datos
  • 128. 9.2.0 ¿Qué queremos scrapear? 1. Necesitamos los siguientes datos: a. Titulos b. Autor c. Editorial d. Precios *Solo de la categoría novela negra
  • 129. 9.2.0 ¿Qué queremos scrapear? Titulo
  • 130. 9.2.0 ¿Qué queremos scrapear?
  • 131. 9.2.0 ¿Qué queremos scrapear? Autor/a
  • 132. 9.2.0 ¿Qué queremos scrapear?
  • 133. 9.2.0 ¿Qué queremos scrapear? 1. Necesitamos los siguientes datos: a. Titulos b. Autor c. Editorial d. Precios Editorial
  • 134. 9.2.0 ¿Qué queremos scrapear?
  • 135. 9.2.0 ¿Qué queremos scrapear? 1. Necesitamos los siguientes datos: a. Titulos b. Autor c. Editorial d. Precios Precio
  • 136. 9.2.0 ¿Qué queremos scrapear?
  • 137. 9.2.0 ¿Dónde encontramos lo que queremos scrapear?
  • 138. 9.2.0 ¿Dónde encontramos lo que queremos scrapear?
  • 139. 9.2.0 ¿Hay paginaciones? Para cada paginación tendremos que iterar el mismo código una y otra vez. Hay que averiguar cómo se forman las URLs paginadas para poder acceder a ellas: >>>https://www.casadellibro.com/libros/novela-negra/126000000/p + pagina
  • 140. 9.2.1 Generamos el script para extraer el primer libro
  • 141. 9.2.1 Iteramos en cada container
  • 142. 9.2.1 Es hora de finalizar Ahora que ya tenemos el script para scrapear todos los libros de la primera página vamos a generar el script final para que afecte a todas las paginaciones.
  • 143. 9.2.2 Hagamos el script Importamos todas las librerías que vamos a usar
  • 144. 9.2.2 Hagamos el script Creamos las listas en las que alojar cada uno de los datos.
  • 145. 9.2.2 Hagamos el script Tendremos una lista que contiene los números del 1 al 120 para las paginaciones
  • 146. 9.2.2 Hagamos el script Creamos variables para evitar que el server nos banee por exceso de peticiones
  • 147. 9.2.2 Hagamos el script
  • 148. 9.2.2 Hagamos el script
  • 149. 9.2.2 Hagamos el script Con Pandas transformamos las listas en un DataFrame que podemos trabajar
  • 150. 9.2.2 Hagamos el script
  • 151. Con Pandas también podemos transformarlo en un csv o en un excel 9.2.2 Hagamos el script
  • 152. Y por último, podemos descargar el archivo gracias a la librería de colab. 9.2.2 Hagamos el script
  • 157. Se puede utilizar Google Sheets para importar datos de APIs fácilmente. API’s como Dandelion API que sirven para hacer análisis de semántica de textos, pueden ser muy útiles para el día a día de nuestro SEO. ➜ Extracción de entidades ➜ Similaridad semántica ➜ Extracción de keywords ➜ Análisis de sentimentos 10.2 Dandelion API
  • 158. Stack Andreas Niessen Stack Proyectos Avanzados 10.3 Stacks de scraping + WP + + + ++
  • 159. ➜ Con este pequeño script podrás exportar toda una SERP fácilmente en un CSV. ○ bit.ly/2uZCXuL 10.4 Scraping Google SERP
  • 165. Python & Otros ➜ Chapter 11 – Web Scraping https://automatetheboringstuff.com/chapter11/ ➜ https://twitter.com/i/moments/949019183181856769 ➜ Scraping ‘People Also Ask’ boxes for SEO and content research https://builtvisible.com/scraping-people-also-ask-boxes-for-seo- and-content-research/ ➜ https://stackoverflow.com/questions/3964681/find-all-files-in-a- directory-with-extension-txt-in-python ➜ 6 Actionable Web Scraping Hacks for White Hat Marketers https://ahrefs.com/blog/web-scraping-for-marketers/ ➜ https://saucelabs.com/resources/articles/selenium-tips-css- selectors RECURSOS ADICIONALES
  • 166. RECURSOS ADICIONALES Node.js (Thanks @mawrkus) ➜ Web Scraping With Node.js: https://www.smashingmagazine.com/2015/04/web-scraping-with- nodejs/ ➜ X-ray, The next web scraper. See through the noise: https://github.com/lapwinglabs/x-ray ➜ Simple, lightweight & expressive web scraping with Node.js: https://github.com/eeshi/node-scrapy ➜ Node.js Scraping Libraries: http://blog.webkid.io/nodejs-scraping- libraries/ ➜ https://www.scrapesentry.com/scraping-wiki/web-scraping-legal-or- illegal/ ➜ http://blog.icreon.us/web-scraping-and-you-a-legal-primer-for-one-of- its-most-useful-tools/ ➜ Web scraping o rastreo de webs y legalidad: https://www.youtube.com/watch?v=EJzugD0l0Bw
  • 167. ¿QUIERES TRABAJAR CON ESTEVE EN SOFTONIC? ➜ Mail: esteve.castells@softonic.com ➜ LinkedIn: Esteve Castells ➜ Twitter: @estevecastells
  • 168. CREDITS ➜ Presentation template by SlidesCarnival ➜ Photographs by Death to the Stock Photo (license) ➜ Marc Mignonsin for creating Jason The Miner
  • 169. ¡Gracias! ¿Alguna pregunta? Esteve Castells | @estevecastells Newsletter: bit.ly/Seopatia https://estevecastells.com/ Nacho Mascort | @NachoMascort Scripts: https://github.com/NachoSEO https://seohacks.es

Editor's Notes

  1. El body está resaltando porque un JS está generando un cambio en algún elemento hijo.