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

爬虫持久化保存


## open方法- 方法名称及参数```markdown
**open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)****file** 文件的路径,需要带上文件名包括文件后缀(c:\\1.txt)**mode** 打开的方式(r,w,a,x,b,t,r+,w+,a+,U)**buffering** 缓冲的buffering大小, 0,就不会有寄存。1,寄存行。大于 1 的整数,寄存区的缓冲大小。负值,寄存区的缓冲大小为系统默认。**encoding** 文件的编码格式(utf-8,GBK等)
  • 常用的文件打开方式
r  以只读方式打开文件。文件的指针会放在文件的开头。w 以写入方式打开文件。文件存在覆盖文件,文件不存在创建一个新文件。a 以追加方式打开文件。如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。r+  打开一个文件用于读写。文件指针会放在文件的开头w+  打开一个文件用于读写。文件存在覆盖文件,文件不存在创建一个新文件。a+  打开一个文件用于读写。如果文件已存在,文件指针放在文件末尾。如果文件不存在,创建新文件并可写入。记忆方法:记住r读,w写,a追加,每个模式后加入+号就变成可读写。

文件的读取及写入

  • 读取文件
file.read([size]):读取文件(读取size个字节,默认读取全部)
file.readline()):读取一行
file.readlines():读取完整的文件,返回每一行所组成的列表
  • 写入文件
file.write(str):将字符串写入文件
file.writelines(lines):将多行文本写入文件中,lines为字符串组成的列表或元组

爬虫数据持久化存储——csv文件

作用:将爬取的数据存放到本地的csv文件中

  • 使用流程
1、导入模块
2、打开csv文件
3、初始化写入对象
4、写入数据(参数为列表)
import csv with open('film.csv','w') as f:writer = csv.writer(f)writer.writerow([])
  • 示例:创建 test.csv 文件,在文件中写入数据
# 单行写入(writerow([]))
import csv
with open('test.csv','w',newline='') as f:writer = csv.writer(f)writer.writerow(['步惊云','36'])writer.writerow(['超哥哥','25'])# 多行写入(writerows([(),(),()]
import csv
with open('test.csv','w',newline='') as f:writer = csv.writer(f)writer.writerows([('聂风','36'),('秦霜','25'),('孔慈','30')])

爬虫数据处理:操作数据库模块——pymysql

pymysql介绍:

PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中是使用mysqldb

pymysql安装:

pip install pymysql -i https://pypi.douban.com/simple

pymysql基本使用

# 导入pymysql模块
import pymysql# 连接database
conn = pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()  # 执行完毕返回的结果集默认以元组显示
# 得到一个可以执行SQL语句并且将结果作为字典返回的游标
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 定义要执行的SQL语句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;  #注意:charset='utf8' 不能写成utf-8
"""# 执行SQL语句
cursor.execute(sql)# 关闭光标对象
cursor.close()# 关闭数据库连接
conn.close()

增删改查操作

添加一条或多条数据
#假设已有某数据库xing,其中包含姓名及编号两个字段
import pymysqlconn = pymysql.connect(host='192.168.0.103',port=3306,user='root',password='123',database='xing',charset='utf8'
)
# 获取一个光标
cursor = conn.cursor()# 定义要执行的sql语句
sql = 'insert into userinfo(user,pwd) values(%s,%s);'
data = [('july', '147'),('june', '258'),('marin', '369')
]
# 拼接并执行sql语句
cursor.executemany(sql, data)# 涉及写操作要注意提交
conn.commit()# 关闭连接
cursor.close()
conn.close()
插入单条数据
import pymysql
conn =pymysql.connect(host ='192.168.0.103',port = 3306,user = 'root',password ='123',database ='xing',charset ='utf8'
)
cursor =conn.cursor()  #获取一个光标
sql ='insert into userinfo (user,pwd) values (%s,%s);'name = 'wuli'
pwd = '123456789'
cursor.execute(sql, [name, pwd])
conn.commit()
cursor.close()
conn.close()
获取最新插入数据
import pymysql# 建立连接
conn = pymysql.connect(host="192.168.0.103",port=3306,user="root",password="123",database="xing",charset="utf8"
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "insert into userinfo (user, pwd) values (%s, %s);"
name = "wuli"
pwd = "123456789"
# 并执行SQL语句
cursor.execute(sql, [name, pwd])
# 涉及写操作注意要提交
conn.commit()
# 关闭连接# 获取最新的那一条数据的ID
last_id = cursor.lastrowid
print("最后一条数据的ID是:", last_id)cursor.close()
conn.close()
删除操作
import pymysql# 建立连接
conn = pymysql.connect(host="192.168.0.103",port=3306,user="root",password="123",database="xing",charset="utf8"
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "delete from userinfo where user=%s;"
name = "june"
# 拼接并执行SQL语句
cursor.execute(sql, [name])
# 涉及写操作注意要提交
conn.commit()
# 关闭连接cursor.close()
conn.close()
更新数据
import pymysql# 建立连接
conn = pymysql.connect(host="192.168.0.103",port=3306,user="root",password="123",database="xing",charset="utf8"
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "delete from userinfo where user=%s;"
name = "june"
# 拼接并执行SQL语句
cursor.execute(sql, [name])
# 涉及写操作注意要提交
conn.commit()
# 关闭连接cursor.close()
conn.close()
查询数据
# 可以获取指定数量的数据
cursor.fetchmany(3)
# 光标按绝对位置移动1
cursor.scroll(1, mode="absolute")
# 光标按照相对位置(当前位置)移动1
cursor.scroll(1, mode="relative"

爬虫数据持久化存储——写入MySQL

  • 在数据库中建库建表
# 连接到mysql数据库
mysql -h127.0.0.1 -uroot -p123456
# 建库建表
create database maoyandb charset utf8;
use maoyandb;
create table filmtab(
name varchar(100),
star varchar(300),
time varchar(50)
)charset=utf8;
  • 回顾pymysql基本使用
一般方法:import pymysql# 创建2个对象
db = pymysql.connect('localhost','root','123456','maoyandb',charset='utf8')
cursor = db.cursor()# 执行SQL命令并提交到数据库执行
# execute()方法第二个参数为列表传参补位
ins = 'insert into filmtab values(%s,%s,%s)'
cursor.execute(ins,['霸王别姬','张国荣','1993'])
db.commit()# 关闭
cursor.close()
db.close()
  • 来试试高效的executemany()方法?
import pymysql# 创建2个对象
db = pymysql.connect('192.168.153.137','tiger','123456','maoyandb',charset='utf8')
cursor = db.cursor()# 抓取的数据
film_list = [('月光宝盒','周星驰','1994'),('大圣娶亲','周星驰','1994')]# 执行SQL命令并提交到数据库执行
# execute()方法第二个参数为列表传参补位
cursor.executemany('insert into filmtab values(%s,%s,%s)',film_list)
db.commit()# 关闭
cursor.close()
db.close()

相关文章:

  • flume系列之:监控flume agent channel的填充百分比
  • 〖大前端 - 基础入门三大核心之JS篇(56)〗- 内置构造函数
  • Jmeter接口自动化测试 —— Jmeter变量的使用
  • ESP32网络开发实例-使用nlohmann/json库数据解析
  • 手拉手EasyExcel极简实现web上传下载(全栈)
  • 《Linux C编程实战》笔记:文件属性操作函数
  • 【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51
  • 四. 基于环视Camera的BEV感知算法-BEVDet
  • webgpu demo阅读 A-Buffer
  • 什么是NPM,NPM使用方法
  • 优化问题笔记(1)
  • python如何通过自身日志系统读写日志文件
  • 2024测试开发面试题完整版本(附答案)
  • StarCCM+ 导入STL几何模型进行仿真
  • 掌握学习方法——作为开发者最重要的能力
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • ES6核心特性
  • Golang-长连接-状态推送
  • JavaScript设计模式与开发实践系列之策略模式
  • JS题目及答案整理
  • node-glob通配符
  • React Transition Group -- Transition 组件
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • tab.js分享及浏览器兼容性问题汇总
  • 基于遗传算法的优化问题求解
  • 简单数学运算程序(不定期更新)
  • 将回调地狱按在地上摩擦的Promise
  • 那些年我们用过的显示性能指标
  • 如何在GitHub上创建个人博客
  • 用jquery写贪吃蛇
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #Ubuntu(修改root信息)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)JPA - JQPL 实现增删改查
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • **python多态
  • .bat批处理(一):@echo off
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 验证控件和javaScript的冲突问题
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .net专家(张羿专栏)
  • .php文件都打不开,打不开php文件怎么办
  • ::什么意思
  • @Autowired @Resource @Qualifier的区别
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @ModelAttribute注解使用
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法