Slide 1

Slide 1 text

Web scraping con Scrapy Claudio Salazar

Slide 2

Slide 2 text

Sobre mí ★ CEO @ alertot ★ Ingeniero de Software @ Scrapinghub (2012-2017) ★ Background en seguridad y desarrollo

Slide 3

Slide 3 text

Lista de requerimientos 1. Generar output fácil de manipular (JSON Lines)

Slide 4

Slide 4 text

Consumiendo una API

Slide 5

Slide 5 text

Consumiendo una API

Slide 6

Slide 6 text

Consumiendo una API

Slide 7

Slide 7 text

Lista de requerimientos 1. Generar output fácil de manejar 2. Posibilitar limpieza de datos

Slide 8

Slide 8 text

Solución actual ● Suficiente para casos simples ● jq no parece la mejor opción para sanitizar datos ● Procesamiento a nivel de shell (awk,sed) podría quebrar el formato JSON ● Un lenguaje de programación daría mayor flexibilidad

Slide 9

Slide 9 text

Bienvenida al World Wild Web

Slide 10

Slide 10 text

Bienvenida al World Wild Web

Slide 11

Slide 11 text

Bienvenida al World Wild Web

Slide 12

Slide 12 text

Bienvenida al World Wild Web

Slide 13

Slide 13 text

Lista de requerimientos 1. Generar output fácil de manejar 2. Posibilitar limpieza de datos 3. Crear un proyecto mantenible

Slide 14

Slide 14 text

Solución actual ● Combinación de extracción, sanitización y resultado ● No hay relación entre los datos y cómo procesarlos ● No es escalable ● Querer mejorar estas falencias nos haría reinventar la rueda

Slide 15

Slide 15 text

Lista de requerimientos 1. Generar output fácil de manejar 2. Posibilitar limpieza de datos 3. Crear un software mantenible 4. Proveer facilidad para recorrer el sitio

Slide 16

Slide 16 text

Solución actual ● Suficiente para sitios pequeños ● Falta de control sobre requests repetidas ● Falta de adaptación a condiciones de red

Slide 17

Slide 17 text

Lista de requerimientos 1. Generar output fácil de manejar 2. Posibilitar limpieza de datos 3. Crear un software mantenible 4. Proveer facilidad para recorrer el sitio 5. Proveer herramientas para acelerar el desarrollo

Slide 18

Slide 18 text

Lista de requerimientos 1. Generar output fácil de manejar 2. Posibilitar limpieza de datos 3. Crear un software mantenible 4. Proveer facilidad para recorrer el sitio 5. Proveer herramientas para acelerar el desarrollo 6. Contar con documentación y comunidad de calidad

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Características ● Framework especializado en web scraping ● Funcionamiento asíncrono ● 25k estrellas en Github ● Fuerte comunidad y soporte

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

scrapy --help

Slide 23

Slide 23 text

scrapy startproject socrates

Slide 24

Slide 24 text

scrapy genspider example example.org

Slide 25

Slide 25 text

Tipos de spiders ● BaseSpider ● CrawlSpider ● XMLFeedSpider ● CSVFeedSpider ● SitemapSpider

Slide 26

Slide 26 text

Items

Slide 27

Slide 27 text

Item loaders (1/2)

Slide 28

Slide 28 text

Item loaders (2/2)

Slide 29

Slide 29 text

Petición simple (1/3)

Slide 30

Slide 30 text

Paso de datos entre peticiones (2/3)

Slide 31

Slide 31 text

Petición usando formulario (3/3)

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Item pipelines

Slide 34

Slide 34 text

Exportando items ● JSON ● JSON lines ● CSV ● XML

Slide 35

Slide 35 text

Almacenando items ● Sistema de archivos ● FTP ● S3 ● Stdout

Slide 36

Slide 36 text

Debugging ● Comando `parse` ● Scrapy shell ● Open in browser ● Telnet

Slide 37

Slide 37 text

Tips - Chrome XPath Helper

Slide 38

Slide 38 text

Tips - Focus en la API

Slide 39

Slide 39 text

Tips - Evitar visual scraping

Slide 40

Slide 40 text

Tips - Conocer soluciones existentes

Slide 41

Slide 41 text

Q&A Gracias! [email protected]