SlideShare a Scribd company logo
1 of 169
Download to read offline
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
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
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
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
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)
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
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
Scraping avanzado o Cómo hacer de internet tu base de datos #seoplus2018
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

Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJim Mlodgenski
 
SQL Server Index and Partition Strategy
SQL Server Index and Partition StrategySQL Server Index and Partition Strategy
SQL Server Index and Partition StrategyHamid J. Fard
 
Oracle Analytics Cloud - Características y migración desde Oracle Business In...
Oracle Analytics Cloud - Características y migración desde Oracle Business In...Oracle Analytics Cloud - Características y migración desde Oracle Business In...
Oracle Analytics Cloud - Características y migración desde Oracle Business In...avanttic Consultoría Tecnológica
 
Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Mydbops
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidOutware Mobile
 
You might be paying too much for BigQuery
You might be paying too much for BigQueryYou might be paying too much for BigQuery
You might be paying too much for BigQueryRyuji Tamagawa
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot frameworkClaudenir Freitas
 
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...Ruby Meditation
 
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)Leinylson Fontinele
 
Visio Examen Semestral
Visio Examen SemestralVisio Examen Semestral
Visio Examen SemestralRiosDiana1
 
Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Carlos Alberto
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
Big Query Basics
Big Query BasicsBig Query Basics
Big Query BasicsIdo Green
 
A Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerA Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerMongoDB
 
Trabalho banco de dados orientado a objetos
Trabalho banco de dados orientado a objetosTrabalho banco de dados orientado a objetos
Trabalho banco de dados orientado a objetoseneck
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 

What's hot (20)

Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
SQL Server Index and Partition Strategy
SQL Server Index and Partition StrategySQL Server Index and Partition Strategy
SQL Server Index and Partition Strategy
 
Oracle Analytics Cloud - Características y migración desde Oracle Business In...
Oracle Analytics Cloud - Características y migración desde Oracle Business In...Oracle Analytics Cloud - Características y migración desde Oracle Business In...
Oracle Analytics Cloud - Características y migración desde Oracle Business In...
 
Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through ) Group Replication in MySQL 8.0 ( A Walk Through )
Group Replication in MySQL 8.0 ( A Walk Through )
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
 
You might be paying too much for BigQuery
You might be paying too much for BigQueryYou might be paying too much for BigQuery
You might be paying too much for BigQuery
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
Banco de Dados II Aula 06 - Modelagem de Dados (Modelo Físico)
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 
Visio Examen Semestral
Visio Examen SemestralVisio Examen Semestral
Visio Examen Semestral
 
Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)Programação Orientada a Objeto(POO)
Programação Orientada a Objeto(POO)
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
Big Query Basics
Big Query BasicsBig Query Basics
Big Query Basics
 
A Technical Introduction to WiredTiger
A Technical Introduction to WiredTigerA Technical Introduction to WiredTiger
A Technical Introduction to WiredTiger
 
Trabalho banco de dados orientado a objetos
Trabalho banco de dados orientado a objetosTrabalho banco de dados orientado a objetos
Trabalho banco de dados orientado a objetos
 
PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Mongodb vs mysql
Mongodb vs mysqlMongodb vs mysql
Mongodb vs mysql
 

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

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 MerinoRubé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 #SeoDayMJ Cachón Yáñez
 
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 frontendmenttes
 
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 Hiberus Tecnologia
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicketAdrià Solé Orrit
 
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)Carlos Caicedo
 
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 8Acquia
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
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 '09Rodrigo Polo
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
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 2013Santiago Montiu Torguet
 

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

Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfangelinebocanegra1
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2montoyagabriela340
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....Aaron Betancourt
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 

Recently uploaded (20)

Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdf
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 

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.
  • 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!
  • 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)
  • 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
  • 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.