Tabla de contenido
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
Scrapy
Es aplicable a Python
un 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. Scrapy
Tiene una amplia gama de usos y se puede utilizar para minería de datos, monitoreo y pruebas automatizadas. Scrapy
Incluye principalmente las siguientes 6
secciones.
- Scrapy Engine (Scrapy Engine): se utiliza para procesar el flujo de datos de todo el sistema y desencadenar varios eventos.
- Programador (Programador): a partir de
URL
buscar una colaURL
. - Descargador: descargue recursos web de Internet.
- Arañas (rastreadores): receptor de descarga de datos sin procesar, para su posterior procesamiento, por ejemplo, utilizando la
Xpath
información de interés extraída. - 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.
- Middleware: todo el
Scrapy
marco 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.
El proceso se puede describir de la siguiente manera:
- Los rastreadores inician el motor de destino
URL
configuradoRequests
⇒ ⇒ ⇒ programador del middleware del rastreador - Programador
Requests
⇒ motor ⇒ descarga de middleware ⇒ descargador - Envía una solicitud de descarga y obtiene una
Responses
respuesta ⇒ ⇒ motor de middleware descargado ⇒ ⇒ crawler crawler middleware - Reptiles extrajeron la
URL
dirección para ensamblar unRequests
motor de destino ⇒ ⇒ ⇒ programador de middleware del rastreador, repita los pasos 2 - El rastreador extrae datos ⇒ motor ⇒ proceso de canalización y almacenamiento de datos
Nota:
- El chino en la imagen se agrega para facilitar la comprensión.
- FIG
绿色线条
transferencia de datos que representan - Preste atención a la posición del middleware en la figura, que determina su función.
- 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:
1.2 Instalación y configuración de Scrapy
Dirección del documento borroso
Use Scrapy
before necesita ser instalado Scrapy
, si el lector está usando un Anaconda Python
entorno de desarrollo, puede usar el siguiente comando para instalar Scrapy
.
conda install scrapy
Si el lector está usando un Python
entorno 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
(2) Instalar en un entorno virtual Scrapy
Después de la instalación, ingrese la siguiente declaración, si no se lanza una excepción, la descripción Scrapy
se ha instalado correctamente.
1.3 Scrapy Shell agarra recursos web
Scrapy
Proporciona un Shell
equivalente Python
de REPL
entorno, puede utilizar este código de Scrapy Shell
prueba Scrapy
. En la Windows
ventana abierta en negro, ejecute scrapy shell
comandos, entrará Scrapy Shell
.
Scrapy Shell
Y Python
un REPL
entorno similar, se puede ejecutar en cualquiera de Python
los códigos, excepto por la adición de un Scrapy
soporte, por ejemplo, en la Scrapy Shell
entrada 10 + 20
, luego el transporte saldrá 30
, como se muestra a continuación:
Scrapy
Principalmente el uso de Xpath
filtrado de HTML
contenido de la página. Entonces, ¿qué es XPath
? Esa es la ruta del filtro es similar a HTML
un código de tecnología en XPath
la discusión de nuevo con más detalle en el contenido posterior. No es necesario conocer XPath
los detalles, ya que Chrome
puede HTML
generar código automáticamente para un nodo Xpath
.
Ahora primero experimente lo que se llama XPath
. Inicie el Chrome
navegador 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 Elements
pestaña, luego haga clic en Elements
el botón negro de flecha izquierda, mueva el mouse a la barra de navegación de Inicio de Taobao 聚划算
en ,Como se muestra abajo.
En este caso, Elements
la pestaña del HTML
có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
.
Obviamente, que contiene 聚划算
el texto de una a
etiqueta, copie la a
etiqueta de la Xpath
siguiente manera:
/html/body/div[3]/div/ul[1]/li[2]/a
De acuerdo con este XPath
código, básicamente puedes adivinar XPath
cómo fue al final. XPath
A través del nivel de relación, a
etiqueta eventualmente especificada , que li[....]
esta etiqueta indica que la etiqueta principal tiene más de una li
etiqueta, [...]
que es un índice desde el 1
principio.
Ahora puede Chrome
probar esto XPath
, haga clic en la Console
pestaña en Console
la entrada que el siguiente código filtra y contiene 聚划算
la a
etiqueta.
$x('/html/body/div[3]/div/ul[1]/li[2]/a')
Si desea filtrar a
la etiqueta que contiene el 聚划算
texto, use XPath
la text
función.
$x('/html/body/div[3]/div/ul[1]/li[2]/a/text()')
La figura es el Console
resultado de la ejecución aquí no se inicia, porque Chrome
enumera mucha información auxiliar, la mayor parte de esta información no es muy útil.
Para Scrapy Shell
probar, use el siguiente comando para reiniciar Scrapy Shell
.
scrapy shell https://www.taobao.com
En Scrapy Shell
desea utilizar response.xpath
el 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 a
se 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 Shell
la 4
declaración de entrada anterior , la salida se muestra a continuación:
2. Utilice Scrapy para escribir rastreadores web
2.1 Crear y usar proyecto Scrapy
Scrapy
Marco proporciona un scrapy
comando para crear un Scrapy
proyecto, puede utilizar el siguiente comando para crear un archivo llamado myscrapy
un Scrapy
proyecto.
scrapy startproject myscrapy
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
Los resultados de los directorios y archivos generados son los siguientes:
En el spiders
directorio de compilación, un first_spider.py
archivo de secuencia de comandos, que es un Spider
programa 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 myscrapy
directorio, 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:
Ejecute la Scrapy
salida después de la Debug
salida de noticias hello world
, que muestra un parse
método de operación y, por lo tanto , la adquisición de recursos URL
especificada de descripción es Web
un éxito.
2.2 Depurar el código fuente de Scrapy en Pycharm
Para poder dirigir el Python
funcionamiento de la red de reptiles y los trabajos de puesta en marcha, es necesario myscrapy
establecer 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.py
el archivo de secuencia de comandos, en PyCharm
la Run
información que se muestra en las entradas de la FIG, también se puede ver en la información de registro generada hello world
.
2.3 Usar herramientas de extensión para ejecutar herramientas Scrapy en Pycharm
En 2.2
la preparación de un main.py
archivo para ejecutar Scrapy
el programa. De hecho, la esencia es el scrapy
comando de ejecución para ejecutar Scrapy
el programa. Pero cada vez que cree un Scrapy
proyecto, debemos escribir un main.py
archivo en el Pycharm
proyecto para ejecutar el Scrapy
programa que parece ser muy problemático, para Pycharm
ejecutar el Scrapy
programa más fácilmente , puede usar la Pycharm
herramienta de extensión a través scrapy
del comando para ejecutar Scrapy
el programa.
PyCharm
La herramienta extendida permite que Pycharm
el comando ejecute comandos externos haciendo clic. Primero haga clic en Pycharm
el comando File
⇒ Settings
para abrir el Settings
cuadro de diálogo.
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:
Después de hacer clic en se muestra a continuación, aparecerá un Create Tool
cuadro de diálogo emergente .
En el Create Tool
cuadro de diálogo, normalmente debe completar el siguiente contenido:
Name
: El nombre de la herramienta de extensión, en este casorunscrapy
, también puede ser cualquier otro nombre.Description
: La descripción de la herramienta ampliada se puede completar a voluntad, lo que equivale al comentario del programa.Program
: Programa a ejecutar, este casoC:\Users\AmoXiang\Envs\spider\Scripts\scrapy.exe
apunta ascrapy
la ruta absoluta del comando. El lector debe cambiarse en lascrapy
ruta del archivo de su máquinaArguments
: Los parámetros de la línea de comando pasados al programa para su ejecución. Esta realización escrawl $FileNameWithoutExtension$
, donde$FileNameWithoutExtension$
esPyCharm
la variable de entorno que representa el nombre del archivo seleccionado actualmente (excluyendo la extensión), como el nombre del archivo actualfirst_spider.py
, después de que se selecciona el archivo,$FileNameWithoutExtension$
el valor esfirst_spider
.Working directory
: Directorio de trabajo, en este caso$FileDir$/../..
. Que$FileDir$
representa el directorio donde se encuentra el archivo actualmente seleccionado. Dado que elScrapy
proyecto es todo el código de reptiles enspiders
el directorio, debe seleccionar elspiders
directorio del archivo de script del rastreador (archivos .py), use la extensión para ejecutar la herramienta del rastreador. Con respecto al proyectoscrapy
generadoScrapy
, el catálogo despiders
proyectos
ubicado en la capa más interna, generalmente se configura en dos directorios de trabajo contrarios. Por tanto,Working directory
el valor puede ser$FileDir$/..
o$FileDir$
.
Después de agregar una herramienta de extensión, seleccione spiders
un 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.