Introducción al marco scrapy
El marco Scrapy es un marco para desarrollar rastreadores rápidamente y solo requiere escribir una pequeña cantidad de código para lograr el efecto del rastreador.
Ventaja
- Reduce la cantidad de código duplicado.
- Mejora de la eficiencia del desarrollo
Componentes raspables
- carpeta araña: almacena rastreadores, con nombres independientes entre rastreadores
- init.py : archivo de inicialización
- settings.py: archivo de configuración, establece la configuración del rastreador
- middlewares.py: archivo de middleware, utilizado para interceptar solicitudes y configurar conexiones de middleware, como configurar cookies, UserAgent, IP, etc.
- pipelines.py: archivo de canalización, utilizado para conservar datos
- item.py: archivo de clase, utilizado para establecer los atributos de las entidades de elementos que deben obtenerse
Desarrollar usando el marco Scrapy
Rastree el sitio web de Douban.
En un entorno Python, use pip para instalar Scrapy y abra la línea de comando en el directorio de desarrollo.
pip install Scrapy
Una vez completada la instalación, cree un proyecto de rastreador. El nombre del proyecto se puede personalizar, aquí está douban_scrapy
scrapy startproject douban_scrapy
Después de la creación, ingrese al directorio del rastreador generado
cd douban_scrapy
Después de ingresar al directorio del rastreador, cree un rastreador. El nombre del rastreador se puede personalizar. Aquí está Douban. El nombre del rastreador va seguido del sitio web de destino que se va a rastrear, que se puede personalizar.
scrapy genspider douban https://movie.douban.com/top250
Después de crear el rastreador, puede ver el rastreador que acabamos de crear en la carpeta de la araña, luego abrir el archivo settings.py en el directorio del rastreador para establecer la configuración del rastreador y agregar el siguiente código a este archivo.
Configurar el nivel de registro
LOG_LEVEL="WARNING"
Configure el proxy y disfraze el rastreador. UserAgent se puede obtener de las herramientas de desarrollo del navegador y no tiene que ser el mismo que se muestra a continuación.
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.200"
Siga las reglas locales del sitio
ROBOTSTXT_OBEY = True
Línea de solicitud máxima
CONCURRENT_REQUESTS = 8
Retrasar solicitudes para evitar que la IP se bloquee debido a solicitudes frecuentes
DOWNLOAD_DELAY = 3
Después de configurar la información del rastreador, abra el archivo item.py y cree la clase que se rastreará.
import scrapy
class MovieItem(scrapy.Item):
title = scrapy.Field()
rank = scrapy.Field()
subject = scrapy.Field()
Abra el archivo del rastreador (douban.py) que acaba de crear y modifique el método de análisis.
# 记住要用这个方式导入类
from ..items import MovieItem
(此方法用于解析得到的html文件)
def parse(self, response):
sel = scrapy.Selector(response)
list_items = sel.css('#content > div > div.article > ol > li')
for list_item in list_items:
movie_item = MovieItem()
movie_item['title'] = list_item.css('span.title::text').extract_first()
movie_item['rank'] = list_item.css('span.rating_num::text').extract_first()
movie_item['subject'] = list_item.css('span.inq::text').extract_first()
yield movie_item
Abra el archivo pipelines.py y configure la información de persistencia:
Método 1: guardar en formato Excel
e instalar la biblioteca de Excel
pip install openpyxl
Configurar la clase de canalización de Excel
class ExcelPipeline:
def __init__(self):
self.wb = openpyxl.Workbook()
self.ws = self.wb.active
self.ws.title = 'Top'
self.ws.append(('标题', '评分', '主题'))
def close_spider(self, spider):
self.wb.save('电影数据.xlsx')
def process_item(self, item, spider):
title = item.get('title', '')
rank = item.get('rank', '')
subject = item.get('subject', '')
self.ws.append((title, rank, subject))
return item
Método 2: guardar como base de datos mysql
e instalar la base de datos mysql
pip install pymysql
Clase de canalización para construir una base de datos mysql
class MysqlPipeline:
def __init__(self):
self.conn = pymysql.connect(host='127.0.0.1', port=3306, user='root',
password='1234', database='spider', charset='utf8mb4')
self.cursor = self.conn.cursor()
self.data = []
def close_spider(self, spider):
if len(self.data) > 0:
self.__write_to_DB()
self.conn.close()
def process_item(self, item, spider):
title = item.get('title', '')
rank = item.get('rank', 0)
subject = item.get('subject', '')
self.data.append((title, rank, subject))
if len(self.data) == 100:
self.__write_to_DB()
self.data.clear()
return item
def __write_to_DB(self):
self.cursor.executemany(
'insert into tb_douban_movie(title, rating, subject) values (%s,%s,%s)',
self.data
)
self.conn.commit()
Después de las dos configuraciones anteriores, abra el archivo settings.py nuevamente y configure la información de la clase de canalización.
ITEM_PIPELINES = {
# 设置管道类的优先级,数值越小优先级越高
"douban_scrapy.pipelines.ExcelPipeline": 300,
"douban_scrapy.pipelines.MysqlPipeline": 200,
}
Abra la línea de comando y vuelva a ingresar a nuestro directorio de rastreadores.
cd douban_scrapy
Inicie el rastreador y obtenga un archivo de Excel llamado datos de película/vea la base de datos para encontrar los datos y completar el rastreo.
scrapy scrawl douban