Scraping contenido dinámico usando Python-Scrapy

Supongamos que estamos leyendo algún contenido de una fuente como sitios web y queremos guardar esos datos en nuestro dispositivo. Podemos copiar los datos en un cuaderno o bloc de notas para reutilizarlos en futuros trabajos. De esta manera, usamos scraping (si no teníamos una fuente o base de datos, el formulario bruto elimina los datos en documentos, sitios y códigos).

Pero ahora existen muchas herramientas para raspar un sitio. Sin embargo, este ejemplo fue elegir Scrapy para raspar el sitio de Python. Scrapy es un marco que extrae estructuras de datos o información de las páginas.

Instalación 

En primer lugar tenemos que comprobar la instalación del editor python, scrapy y vscode o similar en nuestro ordenador. Después de eso, podemos elegir dos formas de iniciar el proyecto. Al principio, un entorno virtual operativo (en python venv o entorno virtual es un entorno de desarrollo), mientras que en el otro método no se utiliza un entorno virtual.

Con venv: en este caso, se usó la fuente de comando para ingresar al modo venv e instalar scrapy en este modo.

comando que instala python –> sudo pacman -S python

comando que instala vs-code –> sudo pacman -S code

comando que instala scrapy en la computadora -> sudo pacman -S scrapy

comando para crear un ambiente de desarrollo –> python3.9 -m venv venv

comando para ejecutar o abrir el entorno de desarrollo -> source venv/bin/activate

comando que instala scrapy en paquetes de python en el ambiente de desarrollo -> pip install scrapy

Sin venv: Para la aplicación se utilizaron los comandos pip, pacman para la construcción de los paquetes.

comando que instala python –> sudo pacman -S python

comando que instala vs-code –> sudo pacman -S code

comando que instala scrapy en la computadora -> sudo pacman -S scrapy

comando que instala scrapy en paquetes de python -> pip install scrapy

Empezando

En esta parte, después de la instalación de scrapy, debe elegir un local en su computadora para crear un proyecto Scrapy, abrir la terminal y escribir el comando scrapy startproject [nombre del proyecto], que crea el proyecto scrapy.

Con venv y Sin venv:

Comando qué proyecto inicial en scrapy -> scrapy startproject example_gfg

Después de crear la ruta del proyecto, son necesarios para ingresar en él.

comando cd para entrar en la ruta de los proyectos -> cd example_gfg

En el proyecto hay un camino llamado arañas. Según documentación, crean las arañas a las que realizan raspado en sitios.

Cada araña tiene un nombre, start_url y métodos de función.

cd example_gfg/example_gfg/spiders

Python3

import scrapy
 
class python_Spider(scrapy.Spider):
    name = ""
    start_urls = []

De acuerdo con el código anterior, que extrae en el sitio Python: los eventos a lo largo del año, el nombre de la araña es python_events y la URL de inicio (en el nombre de la araña y la URL de inicio, podemos cambiar).

Python3

import scrapy
 
class python_Spider(scrapy.Spider):
      name = "geeksforgeeks_article"
     
      start_urls = [
        'https://www.geeksforgeeks.org/data-structures/?ref=shm',
      ]
 
    def parse(self, response):

Usamos el método parse y llamamos a esta función, esta función se usa para extraer datos de los sitios, sin embargo, para raspar los sitios es necesario comprender el selector de respuesta de comando CSS y XPath.
 

  • Solicitud: Es una solicitud que realiza una llamada de objetos o datos.
  • Respuesta: Obtiene respuesta a la Solicitud.
  • Selector: Representa un método que consiste en seleccionar una parte o etiqueta en Html de un sitio para su extracción.
  • Scrapy utiliza dos métodos para seleccionar:
    • XPath: Es un lenguaje de búsqueda navegado en documentos que utilizan etiquetas.
    • CSS: Son hojas de estilo en cascada, que buscan etiquetas en id o class en HTML.

En este ciclo, usamos yield (yield es una reserva de palabras en Python que es similar a una función detenida temporalmente o congelada) para crear un diccionario con el nombre, la fecha y el enlace de los eventos.

Python3

import scrapy
 
class python_Spider(scrapy.Spider):
    name = "python_events"
     
    start_urls = [
        'https://www.python.org/blogs/',
    ]
 
    def parse(self, response):
         
        for item in response.css('ol'):
         
            yield {
                'title': item.css('a::text').get(),
                'link': item.css('a::attr(href)').get(),
            }

Proyecto de prueba con Scrapy Shell

Scrapy tenía un shell con selector de comando CSS probado. 

Sin venv y Con venv:

scrapy shell "https://www.geeksforgeeks.org/data-structures/?ref=shm"
response.css("a").get()
response.css("title").get()
response.css("title::text").get()
response.css("a::text").get() 
response.css("a::attr(href)").get()

Demostración

  • Producimos el código y probamos un shell scrapy.
  • Ejecutamos el código o la araña.
  • Lo dividimos en dos formas para desarrollar el proyecto, sin venv o con venv.

Sin venv: debemos ingresar la ruta del proyecto o araña para ejecutar el comando.

scrapy crawl geeksforgeeks_article

Con venv : Podríamos ejecutar el comando en cualquier ruta si estamos en modo venv.
 

scrapy crawl geeksforgeeks_article

Podemos almacenar los datos en un archivo, con los siguientes comandos:

scrapy crawl geeksforgeeks_article -O geeksforgeeks_article.csv 

o

scrapy crawl geeksforgeeks_article -o geeksforgeeks_article.csv

O (crear e insertar en un nuevo archivo de datos) y o (crear y agregar en un nuevo archivo de datos) son comandos para crear un nuevo archivo e insertar. 
 

Salidas:

Raspado de salida 1

Raspado de salida 2

Publicación traducida automáticamente

Artículo escrito por raulbrunolima y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *