Scrapy framework combat (1): rastreo de sitios web de artículos técnicos conocidos


Scrapy Reptile es un marco muy bueno, a través Scrapy del marco, puede implementar muy fácilmente un poderoso sistema de rastreo, solo tenemos que enfocarnos en comprender las reglas y en cómo manejar los datos se pueden capturar, a través de este artículo para introducir Scrapy el conocimiento de entrada Y algunas aplicaciones avanzadas.

1. Conceptos básicos de Scrapy

1.1 Introducción a Scrapy

ScrapyEs aplicable a Pythonun marco de rastreo de pantalla y rastreo web rápido y de alto nivel para rastrear sitios web y extraer datos estructurados de la página. ScrapyTiene una amplia gama de usos y se puede utilizar para minería de datos, monitoreo y pruebas automatizadas. ScrapyIncluye principalmente las siguientes 6secciones.

  1. Scrapy Engine (Scrapy Engine): se utiliza para procesar el flujo de datos de todo el sistema y desencadenar varios eventos.
  2. Programador (Programador): a partir de URLbuscar una cola URL.
  3. Descargador: descargue recursos web de Internet.
  4. Arañas (rastreadores): receptor de descarga de datos sin procesar, para su posterior procesamiento, por ejemplo, utilizando la Xpathinformación de interés extraída.
  5. Canalización de elementos: reciba datos de los rastreadores web para su posterior procesamiento. Por ejemplo: guardar en base de datos, guardar en archivo de texto.
  6. Middleware: todo el Scrapymarco tiene muchos middleware, middleware como descarga, middleware de rastreador web, el middleware correspondiente a estos filtros, intercalado entre diferentes porciones de flujos de datos interceptados y procesamiento especial.

El flujo de trabajo de las partes anteriores se puede describir mediante el proceso que se muestra en la figura siguiente.

Inserte la descripción de la imagen aquí
El proceso se puede describir de la siguiente manera:

  1. Los rastreadores inician el motor de destino URLconfigurado Requests⇒ ⇒ ⇒ programador del middleware del rastreador
  2. Programador Requests⇒ motor ⇒ descarga de middleware ⇒ descargador
  3. Envía una solicitud de descarga y obtiene una Responsesrespuesta ⇒ ⇒ motor de middleware descargado ⇒ ⇒ crawler crawler middleware
  4. Reptiles extrajeron la URLdirección para ensamblar un Requestsmotor de destino ⇒ ⇒ ⇒ programador de middleware del rastreador, repita los pasos 2
  5. El rastreador extrae datos ⇒ motor ⇒ proceso de canalización y almacenamiento de datos

Nota:

  1. El chino en la imagen se agrega para facilitar la comprensión.
  2. FIG 绿色线条transferencia de datos que representan
  3. Preste atención a la posición del middleware en la figura, que determina su función.
  4. Preste atención a la ubicación del motor, todos los módulos eran independientes entre sí antes, solo interactúan con el motor

Scrapy El papel específico de cada módulo en:

Inserte la descripción de la imagen aquí

1.2 Instalación y configuración de Scrapy

Dirección del documento borroso

Use Scrapybefore necesita ser instalado Scrapy, si el lector está usando un Anaconda Pythonentorno de desarrollo, puede usar el siguiente comando para instalar Scrapy.

conda install scrapy

Si el lector está usando un Pythonentorno de desarrollo estándar , puede usar el siguiente comando para instalar Scrapy.

# windows 安装命令如下 加上 --user 防止用户权限不够:
pip install --user -i http://pypi.douban.com/simple --trusted-host pypi.douban.com Scrapy

Recomendamos la instalación en un entorno virtual en la plataforma en todos Scrapy, el autor aquí Windows, por ejemplo, de la siguiente manera:

(1) Cree un nuevo entorno virtual

Inserte la descripción de la imagen aquí
(2) Instalar en un entorno virtual Scrapy

Inserte la descripción de la imagen aquí
Después de la instalación, ingrese la siguiente declaración, si no se lanza una excepción, la descripción Scrapyse ha instalado correctamente.

Inserte la descripción de la imagen aquí

1.3 Scrapy Shell agarra recursos web

ScrapyProporciona un Shellequivalente Pythonde REPLentorno, puede utilizar este código de Scrapy Shellprueba Scrapy. En la Windowsventana abierta en negro, ejecute scrapy shellcomandos, entrará Scrapy Shell.

Inserte la descripción de la imagen aquí

Scrapy ShellY Pythonun REPLentorno similar, se puede ejecutar en cualquiera de Pythonlos códigos, excepto por la adición de un Scrapysoporte, por ejemplo, en la Scrapy Shellentrada 10 + 20, luego el transporte saldrá 30, como se muestra a continuación:

Inserte la descripción de la imagen aquí

ScrapyPrincipalmente el uso de Xpathfiltrado de HTMLcontenido de la página. Entonces, ¿qué es XPath? Esa es la ruta del filtro es similar a HTMLun código de tecnología en XPathla discusión de nuevo con más detalle en el contenido posterior. No es necesario conocer XPathlos detalles, ya que Chromepuede HTMLgenerar código automáticamente para un nodo Xpath.

Ahora primero experimente lo que se llama XPath. Inicie el Chromenavegador y vaya a la página de inicio de Taobao y luego haga clic en el 检查comando del menú contextual de la página en la ventana emergente de depuración, seleccione la primera Elementspestaña, luego haga clic en Elementsel botón negro de flecha izquierda, mueva el mouse a la barra de navegación de Inicio de Taobao 聚划算en ,Como se muestra abajo.

Inserte la descripción de la imagen aquí
En este caso, Elementsla pestaña del HTMLcódigo se posiciona automáticamente para contener 聚划算una etiqueta, y luego haga clic derecho en el comando de menú Copiar ⇒ Copiar Xpath como se muestra en la FIG., Copiará la etiqueta actual Xpath.

Inserte la descripción de la imagen aquí
Obviamente, que contiene 聚划算el texto de una aetiqueta, copie la aetiqueta de la Xpathsiguiente manera:

/html/body/div[3]/div/ul[1]/li[2]/a

De acuerdo con este XPathcódigo, básicamente puedes adivinar XPathcómo fue al final. XPathA través del nivel de relación, aetiqueta eventualmente especificada , que li[....]esta etiqueta indica que la etiqueta principal tiene más de una lietiqueta, [...]que es un índice desde el 1principio.

Ahora puede Chromeprobar esto XPath, haga clic en la Consolepestaña en Consolela entrada que el siguiente código filtra y contiene 聚划算la aetiqueta.

$x('/html/body/div[3]/div/ul[1]/li[2]/a')

Si desea filtrar ala etiqueta que contiene el 聚划算texto, use XPathla textfunción.

$x('/html/body/div[3]/div/ul[1]/li[2]/a/text()')

La figura es el Consoleresultado de la ejecución aquí no se inicia, porque Chromeenumera mucha información auxiliar, la mayor parte de esta información no es muy útil.

Inserte la descripción de la imagen aquí
Para Scrapy Shellprobar, use el siguiente comando para reiniciar Scrapy Shell.

scrapy shell https://www.taobao.com

Inserte la descripción de la imagen aquí
En Scrapy Shelldesea utilizar response.xpathel método de la prueba Xpath.

response.xpath('/html/body/div[3]/div/ul[1]/li[2]/a/text()').extract()

La salida del código anterior es una lista, si desea regresar directamente 聚划算, debe usar el siguiente código:

response.xpath('/html/body/div[3]/div/ul[1]/li[2]/a/text()').extract()[0]

Del grupo que consta 聚划算de ase puede ver alrededor de la etiqueta el código li[1]indica 天猫, li[3]denota 天猫超市, por lo que el uso de las siguientes dos líneas de código, puede ser por separado 天猫y 天猫超市.

# 输出 "天猫"
response.xpath('/html/body/div[3]/div/ul[1]/li[1]/a/text()').extract()[0]
# 输出 "天猫超市"
response.xpath('/html/body/div[3]/div/ul[1]/li[3]/a/text()').extract()[0]

En Scrapy Shellla 4declaración de entrada anterior , la salida se muestra a continuación:

Inserte la descripción de la imagen aquí

2. Utilice Scrapy para escribir rastreadores web

2.1 Crear y usar proyecto Scrapy

ScrapyMarco proporciona un scrapycomando para crear un Scrapyproyecto, puede utilizar el siguiente comando para crear un archivo llamado myscrapyun Scrapyproyecto.

scrapy startproject myscrapy

Inserte la descripción de la imagen aquí
El archivo de rastreo se crea mediante comandos. El archivo de rastreo es el archivo de trabajo de código principal. Por lo general, la acción de rastreo de un sitio web se escribirá en el archivo de rastreo. El comando es el siguiente:

cd myscrapy
scrapy genspider first_spider www.jd.com

Inserte la descripción de la imagen aquí
Los resultados de los directorios y archivos generados son los siguientes:

Inserte la descripción de la imagen aquí
En el spidersdirectorio de compilación, un first_spider.pyarchivo de secuencia de comandos, que es un Spiderprograma que especifica la URL de los recursos web para rastrear en el programa. El código de muestra es el siguiente:

import scrapy


class FirstSpiderSpider(scrapy.Spider):
    name = 'first_spider'  # Spider的名称 需要该名称启动Scrapy
    allowed_domains = ['www.jd.com']
    start_urls = ['http://www.jd.com/']  # 指定要抓取的Web资源的 URL

    # 每抓取一个URL对应的 Web资源,就会调用该方法,通过response参数可以执行 Xpath过滤标签
    def parse(self, response):
        # 输出日志信息
        self.log('hello world')

Ahora ingrese desde la terminal a la parte superior del myscrapydirectorio, y luego ejecute el siguiente comando para ejecutar Scrapy.

scrapy crawl first_spider

El resultado de la ejecución se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí
Ejecute la Scrapysalida después de la Debugsalida de noticias hello world, que muestra un parsemétodo de operación y, por lo tanto , la adquisición de recursos URLespecificada de descripción es Webun éxito.

2.2 Depurar el código fuente de Scrapy en Pycharm

Para poder dirigir el Pythonfuncionamiento de la red de reptiles y los trabajos de puesta en marcha, es necesario myscrapyestablecer un main.py(文件名可以任意起)archivo de directorio raíz , y luego ingresar el siguiente código.

from scrapy.cmdline import execute

import os
import sys

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# 如果要运行其他的网络爬虫,只需修改上面代码中字符串里面的命令即可
execute(["scrapy", "crawl", "first_spider"])

Ahora ejecute main.pyel archivo de secuencia de comandos, en PyCharmla Runinformación que se muestra en las entradas de la FIG, también se puede ver en la información de registro generada hello world.

Inserte la descripción de la imagen aquí

2.3 Usar herramientas de extensión para ejecutar herramientas Scrapy en Pycharm

En 2.2la preparación de un main.pyarchivo para ejecutar Scrapyel programa. De hecho, la esencia es el scrapycomando de ejecución para ejecutar Scrapyel programa. Pero cada vez que cree un Scrapyproyecto, debemos escribir un main.pyarchivo en el Pycharmproyecto para ejecutar el Scrapyprograma que parece ser muy problemático, para Pycharmejecutar el Scrapyprograma más fácilmente , puede usar la Pycharmherramienta de extensión a través scrapydel comando para ejecutar Scrapyel programa.

PyCharmLa herramienta extendida permite que Pycharmel comando ejecute comandos externos haciendo clic. Primero haga clic en Pycharmel comando FileSettingspara abrir el Settingscuadro de diálogo.

Inserte la descripción de la imagen aquí
Haga clic en el nodo Herramientas ⇒ Herramientas externas a la izquierda, y se mostrará una lista de herramientas extendidas a la derecha, como se muestra en la siguiente figura:

Inserte la descripción de la imagen aquí
Después de hacer clic en se muestra a continuación, aparecerá un Create Toolcuadro de diálogo emergente .

Inserte la descripción de la imagen aquí
En el Create Toolcuadro de diálogo, normalmente debe completar el siguiente contenido:

  1. Name: El nombre de la herramienta de extensión, en este caso runscrapy, también puede ser cualquier otro nombre.
  2. Description: La descripción de la herramienta ampliada se puede completar a voluntad, lo que equivale al comentario del programa.
  3. Program: Programa a ejecutar, este caso C:\Users\AmoXiang\Envs\spider\Scripts\scrapy.exeapunta a scrapyla ruta absoluta del comando. El lector debe cambiarse en la scrapyruta del archivo de su máquina
  4. Arguments: Los parámetros de la línea de comando pasados ​​al programa para su ejecución. Esta realización es crawl $FileNameWithoutExtension$, donde $FileNameWithoutExtension$es PyCharmla variable de entorno que representa el nombre del archivo seleccionado actualmente (excluyendo la extensión), como el nombre del archivo actual first_spider.py, después de que se selecciona el archivo, $FileNameWithoutExtension$el valor es first_spider.
  5. Working directory: Directorio de trabajo, en este caso $FileDir$/../... Que $FileDir$representa el directorio donde se encuentra el archivo actualmente seleccionado. Dado que el Scrapyproyecto es todo el código de reptiles en spidersel directorio, debe seleccionar el spidersdirectorio del archivo de script del rastreador (archivos .py), use la extensión para ejecutar la herramienta del rastreador. Con respecto al proyecto scrapygenerado Scrapy, el catálogo de spidersproyectos
    ubicado en la capa más interna, generalmente se configura en dos directorios de trabajo contrarios. Por tanto, Working directoryel valor puede ser $FileDir$/..o $FileDir$.

Inserte la descripción de la imagen aquí
Después de agregar una herramienta de extensión, seleccione spidersun archivo reptil en el directorio, como first_spider.py, y luego haga clic en Herramientas externas ⇒ comando runcrapy en el menú contextual ejecutar first_spider.py, y generará la misma información sobre la consola.

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/xw1680/article/details/108702939
Recomendado
Clasificación