El marco del rastreador web de Python: el uso del marco del rastreador Scrapy


I. Introducción

  • Página personal : ζ Xiaocaiji
  • Hola a todos, soy Xiaocaiji, aprendamos el uso del marco de trabajo del rastreador web de Python: el marco de trabajo del rastreador Scrapy
  • Si el artículo es útil para usted, bienvenido a seguir, dar me gusta y marcar (un clic en tres enlaces)

2. Cree el marco del rastreador Scrapy

   Dado que el marco del rastreador Scrapy se basa en muchas bibliotecas, especialmente en el sistema Windows, al menos las bibliotecas en las que se debe confiar son Twisted, lxml, PyOpenSSL y pywin32. Los pasos específicos para construir el marco del rastreador Scrapy son los siguientes:

1. Instale el módulo Twisted

   (1) Abra la URL https://pypi.org/project/Twisted/#files , como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


   (2) Descargue el archivo del módulo Twisted, como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


   (3) Después de descargar el archivo binario "Twisted-22.10.0-py3-none-any.whl", ejecute la ventana del símbolo del sistema como administrador, luego use el comando cd para abrir la ruta donde se encuentra el archivo "Twisted-22.10.0-py3-none-any.whl", y finalmente ingrese "pip install Twisted-22.10.0-py3-none-any.whl" en la ventana para instalar Twist ed módulo, como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


2. Instala el marco Scrapy

   (1) Abra la ventana de la línea de comando y luego ingrese el comando "pip install Scrapy" para instalar el marco Scrapy, como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


   (2) Una vez completada la instalación, ingrese "scrapy" en la línea de comando. Si no hay un mensaje anormal o un mensaje de error, significa que el marco Scrapy se instaló correctamente. Como se muestra abajo:

inserte la descripción de la imagen aquí

Nota: Durante la instalación del marco Scrapy, el módulo lxml y el módulo pyOpenSSL también se instalarán en el entorno de Python.


3. Instale el módulo pywin32

  Abra la ventana de comandos y luego ingrese "pip install pywin32", si no hay un mensaje de error, significa que la instalación se realizó correctamente.


3. Crea un proyecto de Scrapy

  Cree una carpeta de proyecto en cualquier ruta, por ejemplo, ejecute la ventana de la línea de comando en la carpeta "D:\python" y luego ingrese "scrapy startproject scrapyDemo" para crear un proyecto llamado "scrapyDemo", como se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


  Para mejorar la eficiencia del desarrollador, Xiaocaiji utiliza la herramienta de desarrollo de terceros PyCharm para abrir el proyecto scrapyDemo que acaba de crear. Después de abrir el proyecto, puede ver el contenido como se muestra en la siguiente figura en la estructura de directorios del proyecto a la izquierda:

inserte la descripción de la imagen aquí


4. Crea un rastreador

   Al crear un rastreador, primero debe crear un archivo de módulo de rastreador, que debe colocarse en la carpeta de arañas. El módulo rastreador es una clase que se utiliza para rastrear datos de un sitio web o varios sitios web. Debe heredar la clase scrapy.Spider. El siguiente es un ejemplo de un rastreador para guardar el código para rastrear páginas web en la carpeta del proyecto como un archivo HTML. El código de muestra es el siguiente:

import scrapy  # 导入框架


class QuotesSpider(scrapy.Spider):
    name = "quotes"  # 定义爬虫名称

    def start_requests(self):
        # 设置爬取目标的地址
        urls = [
            "http://quotes.toscrape.com/page/1/",
            "http://quotes.toscrape.com/page/2/",
        ]
        # 获取所有地址,有几个地址发送几次请求
        for url in urls:
            # 发送网络请求
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 获取网页
        page = response.url.split("/")[-2]

        # 根据页面数据设置文件名称
        filename = "quotes-%s.html" % page
        # 写入文件的模式打开文件,如果没有该文件将创建该文件
        with open(filename, "wb") as f:
            f.write(response.body)
        # 输出保存文件的名称
        self.log("Saved file %s" % filename)

   Al ejecutar el proyecto del rastreador creado por Scrapy, debe ingresar "comillas de rastreo de Scrapy" en la ventana de comandos, donde "comillas" es el nombre del rastreador que definió. Dado que Xiaocaiji utiliza la herramienta de desarrollo de terceros PyCharm, debe ingresar la línea de comando para ejecutar el rastreador en la ventana "Terminal" en la parte inferior. Después de la ejecución, se mostrará la información que se muestra en la siguiente figura:

inserte la descripción de la imagen aquí


Nota: Además de usar el comando "scrapy crawl quotes" ingresado en la ventana de comandos, Scrapy también proporciona una API que puede iniciar rastreadores en el programa, es decir, la clase CrawlerProcess. Primero, debe pasar la información de configuración del proyecto cuando se inicializa CrawlerProcess, luego pasar el nombre del rastreador en el método crawl() y finalmente iniciar el rastreador a través del método start(). el código se muestra a continuación:

# 导入CrawlerProcess类
from scrapy.crawler import CrawlerProcess
# 获取项目配置信息
from scrapy.utils.project import get_project_settings

# 程序入口

if __name__ == "__main__":
    # 创建CrawlerProcess类对象并传入项目设置信息参数
    process = CrawlerProcess(get_project_settings())
    # 设置需要启动的爬虫名称
    process.crawl("quotes")
    # 启动爬虫
    process.start()


5. Obtener datos

   El marco del rastreador Scrapy puede seleccionar un lugar determinado en un archivo HTML a través de una expresión CSS o XPath específica y extraer los datos correspondientes. CSS, utilizado para controlar el diseño de la página HTML, las fuentes, los colores, los fondos y otros efectos. XPath es un lenguaje para encontrar información basada en elementos y atributos en un documento XML.

1. Datos de extracción CSS

  Al usar CSS para extraer datos de un archivo HTML, puede especificar el nombre de la etiqueta en el archivo HTML. Por ejemplo, para obtener el código de la etiqueta del título de la página web en el ejemplo anterior, puede usar el siguiente código:

response.css("title").extract()

  El resultado obtenido es el que se muestra en la figura:

inserte la descripción de la imagen aquí

Descripción: el contenido devuelto es una lista de nodos correspondientes a expresiones CSS, por lo que al extraer datos de las etiquetas, puede usar el siguiente código:

response.css("title::text").extract_first()

  o

response.css("title")[0].extract()

2. XPath para extraer datos

  Al usar una expresión XPath para extraer ciertos datos en un archivo HTML, la información de datos especificada debe obtenerse de acuerdo con la sintaxis de la expresión XPath. Por ejemplo, al obtener la información en la etiqueta del título, se puede usar el siguiente código:

response.xpath("//title/text()").extract_first()

  Usemos un ejemplo para obtener múltiples piezas de información en el ejemplo anterior usando expresiones XPath. El código de muestra es el siguiente:

    def parse(self, response):
        # 获取信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取名人名言文字信息
            text = quote.xpath(".//*[@class='text']/text()").extract_first()
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            # 获取标签
            tags = quote.xpath(".//*[@class='tag']/text()").extract()
            # 以字典的形式输出信息
            print(dict(text=text, author=author, tags=tags))

3. Voltee la página para extraer datos

  En el ejemplo anterior, se han obtenido los datos de la página web. Si necesita obtener toda la información de toda la página web, debe utilizar la función de cambio de página. Por ejemplo, para obtener los nombres de los autores de todo el sitio en el ejemplo anterior, se podría usar el siguiente código:

# 响应信息
    def parse(self, response):
        # div.quote
        # 获取所有信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            print(author)  # 输出作者名称

        # 实现翻页
        for href in response.css("li.next a::attr(href)"):
            yield response.follow(href, self.parse)

4. Crear elementos

  En el proceso de rastreo de datos de páginas web, los datos estructurados se extraen de fuentes de datos no estructurados. Por ejemplo, en el método parse() de la clase QuotesSpider, se puede obtener información de texto, autor y etiquetas. Si es necesario empaquetar estos datos en datos estructurados, se requiere la clase Item proporcionada por scrapy para cumplir con dichos requisitos. El objeto Item es un contenedor simple que se usa para guardar la información de los datos rastreados. Proporciona una API similar a un diccionario y una sintaxis conveniente para declarar sus campos disponibles. Los elementos se declaran utilizando una sintaxis de definición de clase simple y objetos de campo. Al crear el proyecto scrapyDemo, se creó automáticamente un archivo items.py en la estructura de directorios del proyecto para definir la clase Item para almacenar información de datos, que debe heredar scrapy.Item. El código de ejemplo es el siguiente:

import scrapy


class ScrapydemoItem(scrapy.Item):
    # define the fields for your item here like:
    # 定义获取名人名言文字信息
    text = scrapy.Field()
    # 定义获取的作者
    author = scrapy.Field()
    # 定义获取的标签
    tags = scrapy.Field()
    
    pass

  Después de crear el artículo, vuelva al código del rastreador que escribió, cree un objeto de artículo en el método parse() y luego envíe la información del artículo. El código es el siguiente:

    def parse(self, response):
        # 获取信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取名人名言文字信息
            text = quote.xpath(".//*[@class='text']/text()").extract_first()
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            # 获取标签
            tags = quote.xpath(".//*[@class='tag']/text()").extract()
            # 以字典的形式输出信息
            item = ScrapydemoItem(text=text, author=author, tags=tags)
            yield item  # 输出信息

Nota: Debido al gran contenido del marco del rastreador de Scrapy, aquí hay solo una breve introducción a la instalación, creación y extracción de datos del marco del rastreador. Para obtener tutoriales detallados, puede iniciar sesión (https://docs.scrapy.org/en/latest/) Documentos oficiales de Scrapy para consultas .


  Este es el final de la introducción al uso del marco del rastreador web de Python: el marco del rastreador Scrapy. Gracias por leer. Si el artículo es útil para usted, preste atención, haga clic en Me gusta y marque como favorito (un clic en tres enlaces )


Supongo que te gusta

Origin blog.csdn.net/weixin_45191386/article/details/131620901
Recomendado
Clasificación