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

47 篇文章 16 订阅
14 篇文章 0 订阅


欢迎关注 『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爬虫』 专栏,持续更新中
『未完待续』


  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值