Python网络爬虫学习笔记 -第四章:爬虫数据存储

课程地址 https://edu.csdn.net/course/detail/24756/280664

JSON字符串处理:

什么是JSON字符串:

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。更多解释请见:https://baike.baidu.com/item/JSON/2462549?fr=aladdin
JSON支持数据格式:
对象(字典):使用花括号。
数组(列表):使用方括号。
字符串类型:字符串必须要用双引号,不能用单引号)。
整形、浮点型、布尔类型还有null类型。
多个数据之间使用逗号分开。
注意:json本质上就是一个字符串。

将Python对象dump成JSON字符串:

  1. dumps:把Python对象转换成JSON格式的字符串。
  2. dump:把Python对象转换成JSON格式的字符串,并且还可以接收一个文件指针fp参数,可以写入到文件中。

这两个方法都有一个ensure_ascii参数,默认情况下这个参数的值是True,也就是说转换后的JSON字符串是只能存储ascii格式的,不能存储中文,如果想要存储成中文,那么可以将他设置为False。

将JSON字符串load成Python对象:

  1. loads:将JSON字符串转换成Python对象。
  2. load:将JSON字符串转换成Python对象,并且是直接从文件中获取JSON字符串。

CSV文件处理:

CSV文件读取的两种方式:

import csv

# 这种方式读取到的每一条数据是一个列表,所以需要通过下标的方式获取具体某一个值
# with open("stock.csv",'r',encoding='gbk') as fp:
#     reader = csv.reader(fp)
#     for x in reader:
#         print(x[3])

# 这种方式读取到的每一条数据是一个字典,所以可以通过列名获取数据
with open("stock.csv",'r',encoding='gbk') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x['secShortName'])

CSV文件的写入的两种方式:

import csv

headers = ('name','age','height')
# students = [
#     ("张三",18,180),
#     ("李四",19,190),
#     ("王五",20,170)
# ]
students = [
    {"name":"张三","age":18,"height":180},
    {"name":"李四","age":19,"height":190},
    {"name":"王五","age":20,"height":170}
]

# with open("students.csv",'w',encoding='utf-8',newline='') as fp:
#     writer = csv.writer(fp)
#     writer.writerow(headers)
#     writer.writerows(students)


with open("students.csv",'w',encoding='utf-8',newline='') as fp:
    writer = csv.DictWriter(fp,headers)
    # 虽然DictWriter创建的时候有一个headers,但是想要写入数据进去,还是需要调用
    # writer.writeheader()方法,否则,表头数据写入不进去
    writer.writeheader()
    writer.writerows(students)

Excel文件处理:

Sheet相关的操作:

workbook = xlrd.open_workbook("成绩表.xlsx")

# 获取所有的sheet名字
# print(workbook.sheet_names())

# 根据索引获取指定的sheet对象
# sheet = workbook.sheet_by_index(1)
# print(sheet.name)

# 根据名称获取指定的sheet对象
# sheet = workbook.sheet_by_name("2班")
# print(sheet.name)

# 获取所有的sheet对象
# sheets = workbook.sheets()
# for sheet in sheets:
#     print(sheet.name)

# 获取指定sheet的行数和列数
sheet = workbook.sheet_by_index(0)
print({"rows":sheet.nrows,"cols":sheet.ncols})

Cell相关的操作:

from xlrd.sheet import Cell
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(1,1)
print(cell.value)

# cells = sheet.row_slice(1,1,4)
# for cell in cells:
#     print(cell.value)

# cells = sheet.col_slice(0,1,sheet.nrows)
# for cell in cells:
#     print(cell.value)

# cell_value = sheet.cell_value(0,1)
# print(cell_value)

# cell_values = sheet.col_values(1,1,sheet.nrows)
# print(cell_values)

# cell_values = sheet.row_values(1,1,sheet.ncols)
# print(cell_values)

Cell中常用的数据类型:

sheet = workbook.sheet_by_index(0)
# cell = sheet.cell(0,0)
# print(cell.ctype)
# print(xlrd.XL_CELL_TEXT)

# cell = sheet.cell(1,1)
# print(cell.ctype)
# print(xlrd.XL_CELL_NUMBER)

# cell = sheet.cell(19,0)
# print(cell.ctype)
# print(xlrd.XL_CELL_DATE)

# cell = sheet.cell(19,0)
# print(cell.ctype)
# print(xlrd.XL_CELL_BOOLEAN)


cell = sheet.cell(1,1)
print(cell.ctype)
print(xlrd.XL_CELL_EMPTY)

写入Excel步骤如下:

  1. 导入xlwt模块。
  2. 创建一个Workbook对象。
  3. 创建一个Sheet对象。
  4. 把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需 要调用put_cell来添加。
  5. 保存成Excel文件。

编辑Excel文件:

  1. 先读取原来的Excel文件。
  2. 然后在读取的sheet上面进行cell的修改,可以使用sheet.put_cell(row,col,ctype,value,None)方法实现。
  3. 再重新创建一个新的excel文件,然后把之前读取到的数据写入到新的excel文件中。

MySQL数据库操作

MySQL数据库安装(Windows系统):

  1. 下载地址:https://dev.mysql.com/downloads/windows/installer/5.7.0.html
  2. 如果提示没有.NET Framwork框架,那么就在提示框中找到下载链接,下载一个就可以了。
  3. 如果提示没有Microsoft Virtual C++x64(x86),那么百度或者谷歌这个软件安装即可。

Python链接MySQL数据库:

  1. pip install pymysql
  2. 连接代码:
db = pymysql.connect(host="localhost",port=3306,user="root",password="password",database="csdn_crawler",charset='utf8')
* host:以后在链接外网服务器的时候,就要改成外网服务器的ip地址。
* port:在外网一般会更换端口号,不会为3306,这是为了安全考虑。
* user:连接的用户,一般在生产环境中会单独分配一个账号给你,而不是使用root用户。
* password:这个用户的密码。
* database:要连接操作的数据库名。
* charset:设置为utf8这样就能操作中文了。

插入数据:

title = '444'
content = '555'
sql = "insert into article(id,title,content) values(null,%s,%s)"
cursor.execue(sql,(title,content))

语法是:

insert into [表名(字段)] values (字段对应的值)

如果值是动态变化的,那么可以使用’%s’来先作为坑,后期在使用execute方法的时候,可以给一个元组把这些数据填进去。

查找数据:

sql = "select id,title from article where id>3"
cursor.execute(sql)

执行完’sql’语句后,可以使用以下三个方法来提取数据:

  1. fechone:提取第一条数据。
  2. fetchall:提取select语句获取到的所有数据。
  3. fetchmany:提取指定条数的数据。

删除数据:

语法:
delete [表名] [条件]
示例:

sql = "delete from article where id>3"
cursor.execute(sql)

更新数据:

语法:
update [表名][更新操作][条件]
示例:

sql = "update article set title='钢铁是怎样炼成的' where id=3"
cursor.execute(sql)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值