09-爬虫数据存取-Excel文件处理
四种数据存储部分:
1.JSON文件格式处理
2.CSV文件格式处理
3.Excel文件处理
4.MySQL数据库处理
Excle处理:
在爬虫开发中,我们主要关注Excel文件的读写,不会过多关心Excel中的一些样式。如果想要读写Excel文件,需要借助两个库xlrd 和xlwt,其中xlrd是用于读的,xlwt是用于写的
pip install xlrd
pip install xlwt
相关文档:
链接:https://pan.baidu.com/s/1TZU4GztH4LhqhbHVFK1W2g
提取码:j3kc
复制这段内容后打开百度网盘手机App,操作更方便哦
1.读取Excel文件
1>打开Excel文件
import xlrd
xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx")
2>获取Sheet
一个Excel中可能有多个Sheet,那么可以通过以下方法来获取想要的Sheet信息:
sheet_names:获取所有的sheet的名字
sheet_by_index:根据索引获取sheet对象
sheet_by_name:根据名字获取sheet对象
sheets:获取所有的sheet对象
sheet.nrows:这个sheet中的行数
sheet.ncols:这个sheet中的列数
# 读取Excel文件 import xlrd # 打开excel文件 workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx") # sheet_names函数,获取所有的sheet名字 print("获取所有的sheet名字:",workbook.sheet_names()) # sheet_by_index函数,根据索引获取sheet对象 sheet = workbook.sheet_by_index(1) print("获取第二个sheet对象:{0}\tsheet对象的名字:{1}".format(sheet,sheet.name)) # sheet_by_name函数,根据名字获取sheet对象 sheet = workbook.sheet_by_name("2班") print("获取名字为'2班'的sheet对象:{0}\tsheet对象的名字:{1}".format(sheet,sheet.name)) # sheets函数,获取所有的sheet对象 sheets = workbook.sheets() sheets_name = [x.name for x in sheets] print("获取所有的sheet对象:{0}\tsheet对象的名字:{1}".format(sheets,sheets_name)) # sheet.nrows函数,获取指定sheet的行数 sheet = workbook.sheet_by_index(0) print("获取第一个sheet的行数:",sheet.nrows) # sheet.ncols函数,获取指定sheet的列数 sheet = workbook.sheet_by_index(0) print("获取第一个sheet的列数:",sheet.ncols)
3>获取Cell及其属性
每个Cell代表的是表格中的一格,一下方法可以方便获取到想要的cell:
sheet.cell(row,col):获取指定行和列的cell对象
sheet.row_slice(row,start_col,end_col):获取指定行的某几列的cell对象
sheet.col_slice(col,start_row,end_row):获取指定列的某几行的cell对象
sheet.cell_value(row,col):获取指定行和列的值
sheet.row_values(row,start_col,end_col):获取指定行的某几列的值
sheet.col_values(col,start_col,end_col):获取指定列的某几行的值
# Cell相关操作 import xlrd workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx") # sheet.cell(row,col),获取指定行和列的cell对象 sheet = workbook.sheet_by_index(0) cell = sheet.cell(0,0) print("获取第一张表中,0行0列的cell对象:",cell.value) sheet = workbook.sheet_by_index(1) cell = sheet.cell(2,2) print("获取第二张表中,韩信的数学成绩:",cell.value) # sheet.row_slice(row,start_col,end_col),获取指定行的某几列的cell对象(注意:包头不包尾) sheet = workbook.sheet_by_index(0) cells = sheet.row_slice(2,1,4) cell = [x.value for x in cells] print("获取第一张表中,李建林的所有成绩:",cell) # sheet.col_slice(col,start_row,end_row),获取指定列的某几行的cell对象(注意:包头不包尾) sheet = workbook.sheet_by_index(0) cells = sheet.col_slice(0,1,19) cell = [x.value for x in cells] print("获取第一张表中,所有人的名字:",cell) # -------------------------------------------- # sheet.cell_value(row,col):获取指定行和列的值 sheet = workbook.sheet_by_index(1) cell = sheet.cell_value(2,2) print("\n获取第二张表中,韩信的数学成绩:",cell) # sheet.row_values(row,start_col,end_col),获取指定行的某几列的值(注意:包头不包尾) sheet = workbook.sheet_by_index(0) cells = sheet.row_values(2,1,4) print("获取第一张表中,李建林的所有成绩:",cells) # sheet.col_values(col,start_row,end_row),获取指定列的某几行的值(注意:包头不包尾) sheet = workbook.sheet_by_index(0) cells = sheet.col_values(0,1,19) print("获取第一张表中,所有人的名字:",cells)
4>Cell的数据类型
1:xlrd.XL_CELL_TEXT 文本类型
2:xlrd.XL_CELL_NUMBER 文本类型
3:xlrd.XL_CELL_DATE 文本类型:
4:xlrd.XL_BOOLEAN 文本类型:
0:xlrd.XL_CELL_EMPTY 文本类型:
# Cell的类型 import xlrd workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/成绩表.xlsx") # 获取第一张表中,0行0列的cell类型(1:xlrd.XL_CELL_TEXT 文本类型) sheet = workbook.sheet_by_index(0) cell = sheet.cell(0,0) print("1:xlrd.XL_CELL_TEXT 文本类型:",cell.ctype,xlrd.XL_CELL_TEXT)
2.写入Excel步骤:
导入xlwt模块
创建一个Workbook对象
创建一个Sheet对象
使用sheet.write方法把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需要调用put_cell来添加
保存成Excel文件
# 写入Excel import xlwt import random # 创建一个Workbook对象 workbook = xlwt.Workbook() # 创建一个Sheet对象 sheet = workbook.add_sheet("sheet1") # 表头 headers = ["学号","姓名","语文","数学","英语"] # enumerate(headers)返回两个参数,一个索引index,一个对应的内容header for index,header in enumerate(headers): sheet.write(0,index,header) # 学生学号 ids = ["001","002","003"] for index,id in enumerate(ids): sheet.write(index+1,0,id) # 学生姓名 names = ["张三","李四","王五"] for index,name in enumerate(names): sheet.write(index+1,1,name) # 写入语文、数学、英语成绩 for row in range(1,4): for col in range(2,5): sheet.write(row,col,random.randint(1,100)) # 保存Excel文件(注意:此使后缀名写.xls,写.xlsx会有问题) workbook.save(r"F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls") print("保存成功!")
3.编辑Excel步骤:
导入xlrd和xlwt模块
打开Excel文件
编辑Excel
写入到Excel(当前修改是在内存中进行)
# 编辑Excel,在F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls中最后一列添加一个总分,最后一行添加平均分 import xlrd import xlwt # 打开Excel文件 read_workbook = xlrd.open_workbook(r"F:/爬虫/第四章-爬虫数据存储/我写入的成绩表.xls") read_sheet = read_workbook.sheet_by_index(0) # 编辑Excel # 1.最后一列添加一个总分 read_sheet.put_cell(0,5,xlrd.XL_CELL_TEXT,"总分",None) nrows = read_sheet.nrows for row in range(1,nrows): grades = read_sheet.row_values(row,2,6) total = sum(grades) # print(total) read_sheet.put_cell(row,5,xlrd.XL_CELL_NUMBER,total,None) # 2.最后一行添加平均分 read_sheet.put_cell(4,0,xlrd.XL_CELL_TEXT,"平均分",None) ncols = read_sheet.ncols-1 for col in range(2,ncols): grades = read_sheet.col_values(col,1,4) aver = sum(grades)/len(grades) # print(aver) read_sheet.put_cell(4,col,xlrd.XL_CELL_NUMBER,aver,None) # 写入到Excel(当前修改是在内存中进行) write_workbook = xlwt.Workbook() write_sheet = write_workbook.add_sheet("sheet1") nrows = read_sheet.nrows ncols = read_sheet.ncols for row in range(0,nrows): for col in range(0,ncols): write_sheet.write(row,col,read_sheet.cell_value(row,col)) write_workbook.save(r"F:/爬虫/第四章-爬虫数据存储/我编辑的成绩表.xls") print("编辑成功!")