『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)#如果没有获取到评分,默认0quato=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.hqwc.cn/news/543779.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上,有人大代表建议应尽快发挥5G-A(5.5G)优势,加快试点城市布局。此前,中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中,4G改变了我们的生活方式,而5…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

强化学习------DDPG算法(附pytorch代码)

目录 一、前言二、基本原理2.1、经验回放2.2、更新过程2.2.1、Critic网络更新过程2.2.2、Actor网络更新过程2.2.3、 目标网络的更新 2.3、噪音探索 三、算法代码实现四、训练示例4.1、实现效果 一、前言 Deep Deterministic Policy Gradient (DDPG)算法是DeepMind团队提出的一…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章,就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法,选用合适的测试工具和被测系统,实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

STL——map set

文章将解决一下几个问题: 1.什么是set 2.什么是map 3.set应用场景 4.map应用场景 序列式容器和关联式容器 数据结构有序列式容器和关联式容器,序列式容器一般有vector,list,deque…,但关联式容器中就有map,关联式容器也是用来存…

java基础-异常、常用类

异常 Exception 如果程序员认为一段代码可能出现异常/问题,try-catch异常处理机制来解决,从而保证程序的健壮性。将该代码块–》选中–》快捷键 ctrlaltt–》选中 try-catch 常见的一些异常~ 异常体系图,体现了继承和实现关系。&#xff08…

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历(注意三种遍历中Visit所在的位置) 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历(清华大学复试上机题)【较难】 2.2KY212 二叉树遍历二叉树遍历(华中科技大…

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

电机参数辨识算法(2)——基于高频注入的磁链辨识策略

电机参数辨识算法&#xff08;1&#xff09;——基于高频注入的电感辨识策略-CSDN博客https://blog.csdn.net/m0_46903653/article/details/136722750?spm1001.2014.3001.5501上一期已经讲过了电感辨识方法。 今天这是参数辨识的第二期&#xff0c;今天来简单看看磁链的辨识。…

torch.nn.Conv2d()与slim.conv2d()函数参数详解

目录 1. tf.nn.conv2d()函数1.1 input&#xff1a;1.2 filter&#xff1a;1.3 strides&#xff1a;1.4 padding&#xff1a; 2.tf.contrib.slim.conv2d()函数3. torch.nn.Conv2d()函数3.1 官方例子&#xff1a; 1. tf.nn.conv2d()函数 tensorflow构建网络模型时常用的卷积函数…

Redis应用与原理(一)

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 缓存发展史 缓存经典场景 在没有引入缓存前&#xff0c;为了应对大量流量&#xff0c;一般采用&#xff1a; LVS 代理Nginx 做负载均衡搭建 Tomcat 集群 这种方式下&#xff0c;随着访问量的增大&#xf…

虚拟机网络链接

在虚拟网络设置中找到如下界面&#xff1a; "子网 IP" 192.168.79.0/24 表示一个局域网络&#xff0c;它有254个可能的IP地址可供分配&#xff08;192.168.79.1到192.168.79.254&#xff09;&#xff0c;255.255.255.0 是子网掩码&#xff0c;定义了网络和主机部分。…