Utilice el marco Scrapy para el desarrollo de rastreadores

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

  1. Reduce la cantidad de código duplicado.
  2. Mejora de la eficiencia del desarrollo

Componentes raspables

  1. carpeta araña: almacena rastreadores, con nombres independientes entre rastreadores
  2. init.py : archivo de inicialización
  3. settings.py: archivo de configuración, establece la configuración del rastreador
  4. middlewares.py: archivo de middleware, utilizado para interceptar solicitudes y configurar conexiones de middleware, como configurar cookies, UserAgent, IP, etc.
  5. pipelines.py: archivo de canalización, utilizado para conservar datos
  6. 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

Supongo que te gusta

Origin blog.csdn.net/cleverstronge/article/details/132270269
Recomendado
Clasificación