当前位置: 首页 > article >正文

『scrapy爬虫』05. 使用管道将数据写入mysql(详细注释步骤)

目录

    • 1. 新建管道类,并启用
    • 2. 准备好mysql数据库新建表
    • 3. 实现管道写入数据库的代码
      • 测试一下
    • 总结


欢迎关注 『scrapy爬虫』 专栏,持续更新中
欢迎关注 『scrapy爬虫』 专栏,持续更新中

如果对mysql和+python不熟悉可看专栏【Python之pymysql库学习】

1. 新建管道类,并启用

在 Scrapy 中,Item Pipeline 中的方法执行顺序一般会按照以下步骤进行:

  • open_spider:在 Spider 开始爬取时调用,用于初始化操作。
  • from_crawler:在创建 Pipeline 实例时调用,可以获取 Crawler 对象中的配置信息。
  • process_item:处理爬取到的 item 数据的主要方法,会在 Spider 返回 item 数据后被调用。
  • process_spider_input:处理来自 Spider 的输入数据。
  • process_spider_output:处理 Spider 输出的数据。
  • process_spider_exception:处理 Spider 抛出的异常。
  • get_media_requests:从 item 中提取需要下载的媒体文件的 Request 对象。
  • close_spider:在 Spider 结束爬取时调用,用于清理操作。
    这些方法的执行顺序并不是严格固定的,但通常遵循上述顺序。你可以根据自己的需求选择性地实现这些方法来对爬取到的数据进行处理和操作。

pipelines.py新增标准的模板,以后写新的管道直接cv这个模板

#用于将数据存入mysql的类
class DBPipeline:
    # 初始化
    def __init__(self):
        pass
    # 开始爬虫时候要进行的操作
    def open_spider(self, spider):
        pass
    # 处理爬取到的数据并进行后续处理
    def process_item(self, item, spider):
        pass
    # 关闭爬虫时候要进行的操作
    def close_spider(self, spider):
        pass

setting.py新增

# 配置数据管道
ITEM_PIPELINES = {
    'myscrapy.pipelines.DBPipeline': 200, #数据库管道
    'myscrapy.pipelines.MyscrapyPipeline': 300, #数字越小先执行,后期可以有多个管道
    # '你的项目名.pipelines.刚刚管道的类名': 权重, #权重越小先执行,后期可以有多个管道
}

2. 准备好mysql数据库新建表

数据库mzh_scrapy,数据表tb_top_movie
建表代码,注意是反引号不是单引号

USE mzh_scrapy;

DROP TABLE IF EXISTS tb_top_movie;

CREATE TABLE tb_top_movie (
    `mov_id` INT UNSIGNED AUTO_INCREMENT COMMENT '编号',
    `title` VARCHAR(50) NOT NULL COMMENT '标题',
    `score` DECIMAL(3,1) NOT NULL COMMENT '评分',
    `quato` VARCHAR(200) DEFAULT '' COMMENT '评价',
    PRIMARY KEY (`mov_id`)
) ENGINE=InnoDB COMMENT='top电影表';

3. 实现管道写入数据库的代码

安装库

pip install pymysql

有一个经典问题,什么时候提交数据到数据库,有两种写法,大家自行取舍self.cursor.commit()写在什么位置.

import openpyxl
import pymysql
#用于将数据存入mysql的类
class DBPipeline:
    # 初始化
    def __init__(self):
        self.conn=pymysql.connect(host='127.0.0.1',port=3306,
                                  user='root',passwd='123456',database='mzh_scrapy',charset='utf8mb4')
        self.cursor=self.conn.cursor()

    # 开始爬虫时候要进行的操作
    def open_spider(self, spider):
        pass

    # 处理爬取到的数据并进行后续处理
    def process_item(self, item, spider):
        title=item.get('title',"")#如果没有获取到标题,默认空
        score=item.get('score',0)#如果没有获取到评分,默认0
        quato=item.get('quato',"")#如果没有获取到评价默认空
        self.cursor.execute(
            'insert into tb_top_movie(title,score,quato) values (%s,%s,%s)',
            (title,score,quato)
        )#把数据存入缓冲区
        # self.conn.commit()#把数据缓冲区的数据提交到数据库,如果写在这里就是一行数据一行数据的提交
        # 一行一行提交对于整体效率来说变低了,但是数据安全一点
        return item #为什么是return? 我们要让这个管道先,return会把item数据传递给下一个管道用于保存excel的

    # 关闭爬虫时候要进行的操作
    def close_spider(self, spider):
        self.conn.commit()
        #把数据缓冲区的数据提交到数据库,把之前所有数据缓冲区的数据一次性提交
        #一次性提交如果系统性能高有利于提高性能,但有数据丢失的风险
        self.conn.close()

测试一下

Scrapy crawl douban

这里的我的编号是500-750主要是因为我们这个数据是最后一次性存入的,我不小心运行了多次`````相同的数据在mysql中又覆盖掉了,但是编号自动编号会增加.
在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2024 mzh

Crated:2024-3-1

欢迎关注 『scrapy爬虫』 专栏,持续更新中
欢迎关注 『scrapy爬虫』 专栏,持续更新中
『未完待续』



http://www.kler.cn/a/271721.html

相关文章:

  • Ubuntu-手动安装 SBT
  • SSM-MyBatis-总结
  • SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明
  • PHP 7 新特性
  • STM32 LED呼吸灯
  • mamba论文学习
  • Jenkins: 配合docker来部署项目
  • 【前端】CSS常见的选择器
  • JAVA初阶数据结构栈(工程文件后续会上传)(+专栏数据结构练习是完整版)
  • 【设计模式】Java 设计模式之装饰者模式(Decorator)
  • 浅谈C/C++的常量const、指针和引用问题
  • 用Stable Diffusion生成同角色不同pose的人脸
  • C#使用SharpZipLib对文件进行压缩和解压
  • NCV8705MTADJTCG稳压器芯片中文资料规格书PDF数据手册引脚图图片价格功能
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)
  • venv uvicorn python 虚拟服务器外网无法访问
  • swagger踩坑之请求类不显示具体字段
  • Redis + Caffeine = 王炸!!
  • Spring项目-前端问题:Can‘t find variable:$
  • 通用的springboot web jar包执行脚本,释放端口并执行jar包
  • PHP修改默认上传文件缓存位置
  • PC-DARTS: PARTIAL CHANNEL CONNECTIONS FOR MEMORY-EFFICIENT ARCHITECTURE SEARCH
  • HamonyOS进度条通知
  • 请解释Redis是什么?它有哪些主要应用场景?Redis支持哪些数据类型?并描述每种数据类型的特性和使用场景。
  • 1.实用Qt:解决绘制圆角边框时,圆角锯齿问题
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)