Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Scrapy

Curso de Scrapy

Facundo García Martoni

Facundo García Martoni

Nuestro primer proyecto: estructura de carpetas

9/27
Recursos

Aportes 19

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Deberian sacar un curso avanzado para que complementen el uso de cada uno de los archivos y configuraciones que no van a explicar.

- pipelines.py: permite modificar los datos desde que entran al spider (scripts que extraen información) hasta el final.
- middlewares.py: trabaja con un concepto denominado señales: controla eventos que suceden entre los requests y la captura de información.
- items.py: transforma los datos que se reciben del requests.
- _ init _.py: define que todos los archivos en la carpeta son un módulo de python.
- Folder spiders: en donde se crearan los scripts.
- settings.py: archivo con configuraciones del uso de Scrapy.

Excelente el proceso correcto de crear un nuevo proyecto, no solo para usar scraper, son las practicas correctas para cada proyecto.

  • Usar la linea de comando
  • Usar git
  • Entorno virtual
  • Descargar mis dependencias

Excelente Facundo.

Resumen:
■■■■■■■

Inicializando proyecto y estructura de archivos.

  1. Crea tu espacio de trabajo para tus proyectos con scrapy.
  2. Para inicializar un proyecto de scrapy ejecuta en consola: scrapy startproject name_of_project. Esto crea una carpeta con el nombre de tu proyecto. Para el proyecto de “quotes” te encontrarás algo así:
quotes_scraper
    │   scrapy.cfg
    │
    └───quotes_scraper
        │   items.py
        │   middlewares.py
        │   pipelines.py
        │   settings.py
        │   __init__.py
        │
        ├───spiders
            quotes.jl
            quotes.py
            __init__.py
       
  • Conocer la estructura de los proyectos en Scrapy es importante para sacarle provecho al framework.
  • Cada archivo cuenta con un conjunto de utilidades que te permitirán crear tu proyecto de manera ordenada.

settings. py

Este es el archivo en el que se configuran todos los comportamientos que posee scrapy, aquí se activan los pipelines, para que hagan sus procesos, se puede configurar el nombre del BOT, configurar que el scraper cree un archivo de log, es posible usar parámetros para respetar o no el robots.txt , guardar caché, administrar cookies, autorizaciones a diferentes fuentes como AWS, realizar delays entre requests; esto son esperas en las request sucede cada tanto tiempo para evitar [DoS] accidentales en la página.

Es de notar que los setings aunque se puedan configurar en el archivo settings.py pueden ser sobreescritos como atributos de clase dentro de los spiders.


spiders

Un spider es una clase que hereda del objeto scrapy.Spider y se encarga de definir como un sitio o multiples sitios seran escrapeados y también como se hará crawling al instanciarse de la clase respectiva, en resumen como extraen datos estructurados de las páginas.

En un ejemplo rápido los spiders se ven así:


class MySpider(scrapy.Spider):
    name = 'myspider_at_platzi'

	# Propiedades específicas de este spider. 
	allowed_domains = ['example. com']
	
	#Multiples urls
    start_urls = [
        '...example.com/1.html',
        '...example.com/2.html',
        '...example.com/3.html',
    ]

	# La función que hace request y autenticación opcional.
    def start_requests(self):
        return [scrapy.FormRequest("html....example.com/login",
                                   formdata={'user': 'Alejandro', 'pass': 'secret_word'},
                                   callback=self.logged_in)]

items. py

Los spider buscan extraer datos estructurados de data no estructurada, los spiders pueden retornar o no (yield) data te tipo item . Estos Items pueden funcionar para definir la metadata que se pude usar durante la serialización.En este archivo es posible usar item adaptarser para usar exportadores de los items y que persistan en base de datos.

Es como si estuvieras declarando un modelo de datos en Django o Flask, se ve así:


import scrapy

class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
    tags = scrapy.Field()
    last_updated = scrapy.Field(serializer=str)
	

pipelines. py

Después de que los items han sido escrapeados por un spider, es enviado al pipline en el cual puede procesarse a través de diferentes componentes que se ejecutan secuencialmente.

Es una clase que permite entonces procesar el item con propósitos como :

  • Limpieza de datos HTML
  • Validación de que lo escrapeado contiene los campos deseados.
  • Revisión de duplicados.
  • Serialización de datos ( JSON, XML, CSV, Pickle, Marshal… etc)
  • Almacenamiento de lo escrapeado en una base de datos.
  • Es posible crear corutinas para tomar screenshot de lo renderizado, y guardar lso registros.

middleware. py

Los spiders middleware son un framework de hooks dentro de scrapy es un mecanismo de procesamiento donde puedo conetar una funcionalidad perzonalidad para procesar las respeustas que se envían, o lo generado a partir d elso spiders (items)

Se usan cuando:

  • Necesitamos realizar un post procesamiento de los callbacks del sipider, cambiarm, añadir, remover items o quests.
  • Post-procesar las URLS de partida.
  • Manejar las excepciones del spider.
Es triste que el curso no profundiza, la idea de adquirir Platzi es obtener skills, no medios skills.

Que pasaria si un sitio no tiene bien configurado su robots.txt y usamos scrapy en este?

deberia haber un curso un poco mas avanzado donde se vea esta herramienta a profundidad

Las arañas son clases que definen cómo se raspará un determinado sitio (o un grupo de sitios), incluyendo cómo realizar el rastreo (es decir, seguir enlaces) y cómo extraer datos estructurados de sus páginas (es decir, raspar elementos). En otras palabras, las arañas son el lugar donde se define el comportamiento personalizado para rastrear y analizar páginas para un sitio determinado (o, en algunos casos, un grupo de sitios).

scrapy.org | Spiders

En windows, el alias se puede reemplazar por doskey

  • He estado desarrollando un proyecto que va a necesitar hacer web scraping de pagínas de contenido dinámico que scrapy por sí solo no va a poder hacerlo
    Para esto he usado un middleware
    Pero, qué son?

Los middlewares son código que se ejecutan en cualquier lugar (como el nombre lo dice) pero, básicamente, en Scrapy se usan entre los Spiders y el engine y/o entre el Downloader y el engine. Es decir, para capturar el request antes de enviarlo y/o capturar el response.

  • En mi caso, lo usé para capturar el request y devolver un response que contenga la página completa usando Selenium

  • Existen dos tipos de middlewares, los Spider Middleware y los Downloader Middleware (ya se imaginarán donde van)

Los items, so la estructura de nuestros objetos. algo así como un model en el patrón MVC que nos ayuda a estructurar nuestro poryecto y escribir menos código en el spider. Solo creamos una instancia de nuestro objeto en el Spider y hacemos yield del item y es todo, ya que scrapy lo guarda estructurado

  • Dentro de los items tenemos itemloaders que nos sirven para que los elementos elegidos, es decir, lo que extraemos, pasen por alguna función predenterminada. Poe ejemplo, si sabemos que viene con espacios, que los quite automáticamente

Otros elementos importantes son los Rule y Link Extractors. Estos permiten omitir el uso del response.follow que no es bueno usarlo porque no se aprovecha el asincronismo de scrapy

  • Rule usa Link Extractor para definir qué links se deben seguir y que no y si se van a parsear o no
  • Espero que esto les ayude a conocer un poco más de Scrapy y, si les agrada el framweork, investiguen más. Saludos

interesante esta clase cada vez se pone mejor !!

Excelente

Creando proyecto con Scrapy desde cero

Innecesario que repita todo de nuevo. Ya se entendió. Usen ese tiempo para explicar más en profundidad como funciona scrapy.

Si alguno no le funciona deactivate, tienen que buscar dentro de su entorno virtual el archivo deactivate.bat, y luego ejecutan el path a ese archivo. En mi caso como mi entorno virtual se llama venv, me movi en la terminal hasta la carpeta padre del entorno virtual y coloque: .\venv\Scripts\deactivate.bat

El proceso correcto de crear un nuevo proyecto, no solo para usar scraper, son las practicas correctas para cada proyecto.

  • Usar la linea de comando

  • Usar git

  • Entorno virtual

  • Descargar las dependencias

🤖🤖🤖

-pipelines.py: permite modificar los datos desde que entran al spider (scripts que extraen información) hasta el final.
- middlewares.py: trabaja con un concepto denominado señales: controla eventos que suceden entre los requests y la captura de información.
- items.py: transforma los datos que se reciben del requests.
- _ init _.py: define que todos los archivos en la carpeta son un módulo de python.
- Folder spiders: en donde se crearan los scripts.
- settings.py: archivo con configuraciones del uso de Scrapy.

El comando touch en windows 10 no me funcionó, en cambio utilicé la siguiente linea que tiene el mismo resultado:

fsutil file createnew .gitignore 0

Por alguna razón siempre que quiero iniciar el proyecto de Scrapy tengo que cerrar vscode, sino me saca un OSError diciendo que la carpeta module está siendo utilizada, parece que vscode la bloquea cuando se crea.