[100 días de dominio de Python] Día 45: desarrollo del rastreador web de Python_ Marco del rastreador Scrapy

Tabla de contenido

1 Introducción a Scrapy

2 selectores scrapy

3 Cree rápidamente un rastreador Scrapy

4 Middleware de descarga y rastreo

5 Uso de tuberías


1 Introducción a Scrapy

Scrapy es un marco de rastreo web de código abierto para rastrear datos de sitios web y realizar extracción de datos. Está escrito en el lenguaje de programación Python y proporciona un potente conjunto de herramientas y bibliotecas para ayudar a los usuarios a explorar y extraer datos en la web. Scrapy tiene como objetivo simplificar el proceso de desarrollo del rastreador y proporciona un mecanismo altamente personalizable para manejar las necesidades de extracción de datos de varios sitios web.

Las siguientes son algunas de las características y componentes principales del marco Scrapy:

  1. Gestión de solicitudes y respuestas: Scrapy proporciona un sistema de gestión de solicitudes y respuestas asincrónicas que permite a los usuarios realizar solicitudes HTTP y procesar el HTML u otros datos devueltos.

  2. Extracción de datos: Scrapy utiliza métodos de extracción de datos basados ​​en selectores XPath o CSS, lo que permite a los usuarios extraer fácilmente los datos necesarios de las páginas web.

  3. Middleware: Scrapy permite a los usuarios definir middleware para personalizar el procesamiento de solicitudes y respuestas, como modificar encabezados de solicitudes, procesar servidores proxy, etc.

  4. Pipeline: Pipeline es un componente utilizado para procesar datos en Scrapy. Puede limpiar, procesar y almacenar los datos capturados en la tubería.

  5. Programador: el programador es responsable de administrar el orden en que se envían las solicitudes y cómo se procesan las solicitudes simultáneas para garantizar que los rastreadores accedan a los sitios web a un ritmo razonable.

  6. Límite de velocidad automático: Scrapy viene con una función de límite de velocidad automático para evitar una carga excesiva en el sitio web de destino.

  7. Soporte asincrónico: Scrapy admite el procesamiento asincrónico, lo que permite la ejecución eficiente de múltiples solicitudes y operaciones de procesamiento.

  8. Extensibilidad: puede escribir extensiones para personalizar el comportamiento de Scrapy según sea necesario, como agregar nuevo middleware, canalizaciones, etc.

  9. Herramientas de línea de comandos: Scrapy proporciona herramientas de línea de comandos para que los usuarios creen, administren y ejecuten rastreadores.

  10. Documentación enriquecida: Scrapy proporciona documentación oficial detallada y tutoriales para permitir que los nuevos usuarios comiencen rápidamente y proporciona recursos para que los usuarios avanzados comprendan el marco en profundidad.

En conclusión, Scrapy es un marco de rastreo web potente y altamente personalizable adecuado para proyectos de extracción de datos de todos los tamaños, desde tareas simples de recopilación de datos hasta extracción y análisis de datos complejos. Ya sea un principiante o un desarrollador experimentado, puede utilizar Scrapy para crear y administrar rastreadores de forma rápida y eficiente.

2 selectores scrapy

        Scrapy proporciona dos selectores principales para extraer datos de páginas web: selectores basados ​​en XPath y selectores basados ​​en CSS. Ambos selectores le permiten localizar y extraer fácilmente los datos deseados de un documento HTML o XML.

  1. Selectores basados ​​en XPath: XPath (XML Path Language) es un lenguaje para localizar elementos en documentos XML. En Scrapy, los selectores XPath le permiten seleccionar y extraer datos mediante expresiones de ruta. A continuación se muestran algunos ejemplos de expresiones XPath comunes:

    • Seleccionar elementos: //elementName(seleccione todos los elementos llamados elementName)
    • Seleccionar elementos bajo una ruta específica: //parent/child(seleccione todos los elementos secundarios bajo el elemento padre)
    • Seleccionar elementos con un atributo específico: //element[@attribute='value'](seleccionar elementos con atributo atributo y valor valor)
  2. Selectores basados ​​en CSS: los selectores CSS (hojas de estilo en cascada) se usan comúnmente para aplicar estilos en el diseño web, pero también se pueden usar para seleccionar elementos de documentos HTML. Los selectores de CSS en Scrapy le permiten localizar y extraer datos utilizando una sintaxis similar a un selector de CSS. A continuación se muestran algunos ejemplos de selectores de CSS comunes:

    • Seleccionar elementos: elementName(seleccione todos los elementos llamados elementName)
    • Seleccionar clase: .className(seleccione todos los elementos con clase className)
    • Seleccionar ID: #idName(seleccione elementos con idName ID)
    • Seleccione los elementos debajo de la ruta: parent > child(seleccione todos los elementos secundarios debajo del elemento principal)

En Scrapy, puede utilizar estos selectores para localizar y extraer datos de páginas web. Aquí hay un código de muestra usando selectores Scrapy:

from scrapy.selector import Selector

html_content = """
<html>
  <body>
    <div class="container">
      <h1>Title</h1>
      <p>Paragraph 1</p>
      <p>Paragraph 2</p>
    </div>
  </body>
</html>
"""

selector = Selector(text=html_content)

# 使用 XPath 选择器提取数据
title = selector.xpath("//h1/text()").get()
paragraphs = selector.xpath("//p/text()").getall()

# 使用 CSS 选择器提取数据
title = selector.css("h1::text").get()
paragraphs = selector.css("p::text").getall()

Ya sea que elija utilizar selectores XPath o CSS, Scrapy proporciona métodos convenientes para extraer los datos necesarios de las páginas web, lo que hace que las tareas de extracción de datos sean más fáciles y eficientes. 

3 Cree rápidamente un rastreador Scrapy

        La creación de un rastreador Scrapy simple se puede dividir en los siguientes pasos. El siguiente ejemplo le guiará en la creación de un rastreador sencillo que rastrea citas famosas.

  1. Instale Scrapy: Primero, debe asegurarse de tener Python y Scrapy instalados. Si no tienes Scrapy instalado, puedes instalarlo con el siguiente comando:
pip install scrapy

Cree un nuevo proyecto Scrapy: desde la línea de comando, navegue hasta el directorio donde desea crear el proyecto y ejecute el siguiente comando para crear un nuevo proyecto Scrapy:

scrapy startproject quotes_spider

Esto creará un directorio de proyecto llamado "quotes_spider" en el directorio actual.

(1) Cree un rastreador: en el directorio del proyecto, ingrese el directorio "quotes_spider" y ejecute el siguiente comando para crear un rastreador:

cd quotes_spider
scrapy genspider quotes quotes.toscrape.com

Esto creará un rastreador llamado "quotes" que extraerá datos del sitio web "quotes.toscrape.com".

(2) Edite el código del rastreador: busque el archivo llamado "quotes.py" en el directorio "quotes_spider/spiders", que es el archivo del rastreador recién creado. Abra este archivo con su editor favorito y edite los métodos start_urlsy :parse

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('span small::text').get(),
            }

        next_page = response.css('li.next a::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

En este rastreador de muestra, rastreamos el texto de citas famosas y la información del autor del sitio web de citas famosas. parseEl método es responsable de extraer datos de la página web y response.followseguir el enlace de la página siguiente utilizando el método.

(3) Ejecute el rastreador: regrese al directorio del proyecto (directorio "quotes_spider") y ejecute el siguiente comando para ejecutar el rastreador:

scrapy crawl quotes

        El rastreador comenzará a visitar la URL de inicio, tomará datos y los mostrará en el terminal.

        Este es un ejemplo sencillo del proceso de creación del rastreador Scrapy. De hecho, puede personalizar cada aspecto del rastreador según sus necesidades, incluidos encabezados de solicitud, canalizaciones, middleware, etc. Al leer la documentación oficial de Scrapy, puede obtener información sobre cómo crear rastreadores más complejos y personalizados.

4 Middleware de descarga y rastreo

        En el marco Scrapy, el middleware de descarga y el middleware de rastreo son dos tipos diferentes de middleware, que se utilizan para insertar lógica personalizada en el flujo de procesamiento de solicitud/respuesta. Se ubican en el proceso de envío de solicitudes y recepción de respuestas respectivamente, permitiéndole modificar y controlar las solicitudes de red y el procesamiento de datos.

Middleware de descarga (Middleware de descarga): el middleware de descarga se encuentra en el proceso de envío de la solicitud y es responsable de procesar la solicitud y la operación antes de que se devuelva la respuesta. Este middleware se puede utilizar para modificar encabezados de solicitudes, configurar proxy, manejar cookies, etc. El middleware de descarga se puede configurar globalmente o de forma específica para el rastreador.

Algunas operaciones comunes de middleware de descarga incluyen:

  • Modifique los encabezados de las solicitudes para simular diferentes tipos de solicitudes del navegador.
  • Configure un servidor proxy para ocultar la dirección IP real del rastreador.
  • Maneja cookies para mantener el estado de la sesión.
  • Reintentos y manejo de errores para solicitudes.
  • Controla la concurrencia de solicitudes.

Spider Middleware: Spider Middleware se encuentra en el proceso de recepción de respuestas y procesamiento de datos, y es responsable de procesar la respuesta y los datos extraídos. Este middleware se puede utilizar para modificar los datos rastreados, manejar excepciones, realizar conversión de datos, etc. El middleware del rastreador se puede configurar de forma global o específica del rastreador.

Algunas operaciones comunes de middleware de rastreador incluyen:

  • Preprocesar y limpiar datos extraídos de páginas web.
  • Conversión de datos personalizada, como formato de fecha, procesamiento de texto, etc.
  • Manejar anomalías, como la estrategia de procesamiento de IP bloqueadas.
  • Controlar el flujo y filtrado de datos.

El middleware de configuración settings.pyse realiza en el archivo de Scrapy. Puede establecer una prioridad para cada middleware para determinar su orden en el flujo de procesamiento. Más específicamente, el middleware de descarga de mayor prioridad procesará las solicitudes primero, mientras que el middleware de rastreo de mayor prioridad procesará las respuestas y los datos extraídos primero.

A continuación se muestra un ejemplo sencillo que muestra cómo configurar el middleware del descargador y del rastreador:

# settings.py

DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.MyDownloaderMiddleware': 543,
}

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.MySpiderMiddleware': 543,
}

        En el ejemplo anterior, myproject.middlewares.MyDownloaderMiddlewarey myproject.middlewares.MySpiderMiddlewareson middleware de descarga y rastreo personalizados, respectivamente. Su prioridad se establece en 543.

        Al utilizar el middleware de descarga y rastreador, puede insertar lógica personalizada en el flujo de procesamiento de solicitudes y respuestas para lograr un rastreador más flexible y eficiente que satisfaga sus necesidades.

5 Uso de tuberías

        En Scrapy, la canalización (Pipeline) es un componente que se utiliza para procesar los datos rastreados por los rastreadores. Le permite realizar múltiples operaciones durante el rastreo de datos desde el rastreador hasta el guardado o procesamiento final, como limpieza de datos, validación, almacenamiento en una base de datos, exportación a un archivo, etc. Las canalizaciones de Scrapy proporcionan una forma flexible y personalizable de procesar flujos de datos extraídos.

A continuación se explica cómo utilizar la canalización para procesar los datos extraídos:

(1) Habilite la canalización: en el archivo de configuración de Scrapy ( settings.py), debe habilitar y configurar la canalización. Puede ITEM_PIPELINESespecificar qué clase de canalización usar y su prioridad en la configuración. La prioridad es un valor entero, y los valores más pequeños indican una prioridad más alta.

# settings.py

ITEM_PIPELINES = {
    'myproject.pipelines.MyPipeline': 300,
}

En el ejemplo anterior, myproject.pipelines.MyPipelinees su clase de canalización personalizada y la prioridad está establecida en 300.

(2) Cree una clase de canalización: cree una clase de canalización en el proyecto, que procesará los datos capturados por el rastreador. Necesita implementar algunos métodos para trabajar con los datos, como process_itemel método.

# pipelines.py

class MyPipeline:
    def process_item(self, item, spider):
        # 在这里处理数据,可以进行清洗、验证、存储等操作
        return item

En el ejemplo anterior, process_itemel método recibe dos parámetros: itemel elemento de datos capturado por el rastreador spidery la instancia actual del rastreador.

(3) Procesamiento de datos: en el método de la clase de canalización process_item, puede realizar varias operaciones con los datos, como limpieza, formateo y verificación de datos. También puede guardar datos en una base de datos, exportarlos a un archivo y más.

El siguiente es un ejemplo sencillo que muestra cómo procesar datos rastreados en una canalización y guardarlos en un archivo JSON:

# pipelines.py

import json

class MyPipeline:
    def open_spider(self, spider):
        self.file = open('data.json', 'w')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        data = {
            'text': item['text'],
            'author': item['author']
        }
        json.dump(data, self.file)
        self.file.write('\n')
        return item

En el ejemplo anterior, open_spiderlos métodos y close_spiderse llaman al inicio y al final del rastreo, abriendo y cerrando el archivo de datos, respectivamente. process_itemEl método extrae y guarda los datos en un archivo JSON.

Al configurar y escribir clases de canalización personalizadas, puede realizar varias operaciones en los datos rastreados, logrando así un proceso de procesamiento de datos altamente personalizado.

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/132411515
Recomendado
Clasificación