写入和读取CSV、Excel和Word中的数据是编写爬虫程序的重要内容,现将学习爬虫涉及到的文档数据存储知识整理出来与大家分享。
Python之文档数据存储
CSV数据的写入和读取
常用的数据存储介质有文件、关系型数据库和非关系型数据库。文本文档存储适用于具有时效性的数据,如股市行情、商品信息和排行榜信息等,这类数据具有动态变化性质,非特殊要求下,建议存放文件。Python标准库自带CSV模块,不用自行安装。
数据写入CSV
代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 7:08 PM
# 文件 :CSV数据的写入和读取.py
# IDE :PyCharm
import csv
# 若存在文件,则打开csv文件,若不存在,则新建文件
# 若不设置newline='',则每行数据会隔一行空白行
csvfile = open('csv_test.csv', 'w', newline='')
# 将文件加载到csv对象中
writer = csv.writer(csvfile)
# 写入一行数据
writer.writerow(['姓名', '年龄', '电话'])
# 多行数据写入
data = [
('小P', '18', '13134343222'),
('小Y', '22', '138001380000')
]
writer.writerows(data)
# 关闭csv对象
csvfile.close()
writerow和writerows对应单行写入和多行写入
读取全部数据
代码如下:
# 获取全部数据
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 7:19 PM
# 文件 :读取csv.py
# IDE :PyCharm
import csv
csvfile = open('csv_test.csv', 'r')
# 以列表形式输出
reader = csv.reader(csvfile)
# 以字典形式输出,第一行作为字典的键
# reader = csv.DictReader(csvfile)
rows = [row for row in reader]
print(rows)
读取某行数据
可以循环全部数据,再对每行数据做一个判断,判断是否符合筛选条件,代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 7:26 PM
# 文件 :读取某一行数据.py
# IDE :PyCharm
import csv
csvfile = open('csv_test.csv', 'r')
reader = csv.reader(csvfile)
# 获取某一行数据
for row in reader:
if '小Y' in row:
print(row)
小结:CSV的存储相对简单而且实用性比较强
Excel数据的写入和读取
Python操作的Excel库有xldd、xlwt、pyExcelerator 和openpyxl。其中,pyExcelerator只支持2003版本,openpyxl只支持2007版本,xlrd支持Excel任何版本的读取,xlwt支持Excel任何版本的写入。
# xlrd和xlwt的安装
pip install xlrd
pip install xlwt
Excel的写入
相对比CVS复杂,Excel可以实现设置数据格式、合并单元格、设置公式和插入图片等功能。使用xlwt实现上述功能,代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 7:32 PM
# 文件 :xlwt-写数据.py
# IDE :PyCharm
import xlwt
# 新建一个Excel 文件
wb = xlwt.Workbook()
# 新建一个sheet
ws = wb.add_sheet('Python', cell_overwrite_ok=True)
# 定义字体对齐方式对象
alignment = xlwt.Alignment()
# 设置水平方向
# HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED
# HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
alignment.horz = xlwt.Alignment.HORZ_CENTER
# 设置垂直方向
# VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
alignment.vert = xlwt.Alignment.VERT_CENTER
# 定义格式对象
style = xlwt.XFStyle()
style.alignment = alignment
# 合并单元格write_merge(开始行, 结束行, 开始列, 结束列, 内容, 格式)
ws.write_merge(0, 0, 0, 5, 'Python网络爬虫',style)
# 写入数据wb.write(行,列,内容)
for i in range(2, 7):
for k in range(5):
ws.write(i, k, i + k)
# Excel 公式xlwt.Formula
ws.write(i, 5, xlwt.Formula('SUM(A'+str(i+1)+':E'+str(i+1)+')'))
# 插入图片,insert_bitmap(img, x ,y , x1, y1, scale_x=0.8, scale_y = 1)
# 图片格式必须bmp
# x表示行数,y表示烈属
# x1表示相对原来位置向下偏移的像素
# y1表示相对原来位置向右偏移的像素
# scale_x, scale_y缩放比例
ws.insert_bitmap('/Users/liuxiaowei/PycharmProjects/爬虫练习/文档数据存储/Excel数据/test.bmp', 9, 1, 2, 2,scale_x=0.3, scale_y=0.3)
# 保存文件
wb.save('file.xls')
写入Excel的数据整体思路
如下:
(1)xlwt创建生成临时Excel对象
(2)添加WorkSheets对象
(3)单元格的位置由行列索引决定,索引从0开始
(4)数据写入主要由write_merge()和write()实现,两者分别是合并单元格再写入和单元格写入。
(5)设置数据格式是在写入(write_merge()和write())的数据中传入参数style
读取Excel数据
由xlrd模块实现,以上述代码生成的Excel文件为读取目标,代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 10:30 PM
# 文件 :xlrd-读取数据.py
# IDE :PyCharm
# xlrd:excel read
import xlrd
wb = xlrd.open_workbook('file.xls')
# 获取Sheets总数
ws_count = wb.nsheets
print('Sheets总数: ', ws_count)
# 通过索引顺序获取Sheets
# ws = wb.sheets()[0]
# ws = wb.sheet_by_index(0)
# 通过Sheets名获取Sheets
ws = wb.sheet_by_name('Python')
# 获取整行的值(以列表返回内容)
row_value = ws.row_values(3)
print('第4行数据: ', row_value)
# 获取整列的值(以列表返回内容)
row_col = ws.col_values(3)
print('D列数据:', row_col)
# 获得所有行列
nrows = ws.nrows
ncols = ws.ncols
print('总行数: ', nrows, ', 总列数:', ncols)
# 获取某个单元格内容cell(行,列)
cell_F3 = ws.cell(2, 5).value
print('F3内容:', cell_F3)
# 使用行列索引获取某个单元格内容
row_F3 = ws.row(2)[5].value
col_F3 = ws.col(5)[2].value
print('F3内容: ', row_F3, 'F3内容:', col_F3)
读取Excel的数据思路:
如下:
(1)xlrd 生成Workbook对象,并指向Excel文件
(2)选择Workbook里某个WorkSheets对象
(3)获取WorkSheets里数据已占用的总行数和总列数(某个单元格数据)
(4)循环总行数和总列数,读取每一个单元格数据
注意:当我们使用xlrd模块读取Excel的时候,如果Excel的数据内容中添加了图片信息,那么xlrd模块将无法读取Excel的数据内容
Word数据的写入和读取
将数据存储在Word文档中,一般以文章、新闻报道和小说这类文字内容较长的数据为主。Python读写Word需要第三方库扩展支持,使用pip安装:
pip install python-docx
Word数据写入
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 11:18 PM
# 文件 :写入数据.py
# IDE :PyCharm
# 数据写入
from docx import Document
from docx.shared import Inches
# 创建对象
document = Document()
# 添加标题,其中"0"代表标题类型,共有4种类型,具体可在Word的"开始--样式"中查看document.add_heading('Python 爬虫', 0)
# 添加正文内容并设置部分内容格式
p = document.add_paragraph('Python 爬虫开发-')
# 设置内容加粗
p.runs[0].bold = True
# 添加内容并加粗
p.add_run('数据存储-').bold = True
# 添加内容
p.add_run('Word-')
# 添加内容并设置字体斜体
p.add_run('存储实例。').italic = True
# 添加正文,设置'样式'--'明显引用'
document.add_paragraph('样式-明显引用', style='IntenseQuote')
# 添加正文、设置"项目符号"
document.add_paragraph(
'项目符号2', style='ListNumber'
)
# 添加图片
document.add_picture('test.png', width=Inches(1.25))
# 添加表格
table = document.add_table(rows=1,cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in range(2):
row_cells = table.add_row().cells
row_cells[0].text = 'a'
row_cells[1].text = 'b'
row_cells[2].text = 'c'
# 保存文件
document.add_page_break()
document.save('test.docx')
在Word中写入数据的整体思路
如下:
(1)创建生成临时Word对象
(2)分别使用add_paragraph()和add_heading()对Word对象添加标题和正文内容
(3)如果想设置正文内容的字体加粗和斜体等,可以将正文内容p对象的属性runs[0].bold和add_run(‘XX’).italic设置为True
(4) 如果要插入图片和添加表格,可以在Word对象中使用方法add_picture()和add_table()
(5) 完成数据写入, 需要将Word对象保存生成Word文件
Word数据读取
代码如下:
#_*_coding:utf-8_*_
# 作者 :liuxiaowei
# 创建时间 :1/18/22 11:43 PM
# 文件 :读取数据.py
# IDE :PyCharm
# 数据读取
import docx
def readDocx(docName):
fullText = []
doc = docx.Document(docName)
# 读取全部内容
paras = doc.paragraphs
# 将每行数据存入列表
for p in paras:
fullText.append(p.text)
# 将列表数据转成字符串
return '\n'.join(fullText)
print(readDocx('test.docx'))
在Word中读取数据的整体思路
如下:
(1)生成Word对象,并指向Word文件
(2)使用paragraphs()获取Word对象全部内容
(3)循环paragraphs对象,获取每行数据并写入列表
(4)将列表转成字符串,每个列表元素使用换行符连接,转换后数据的段落布局与Word文档相似
希望此文对您有所帮助和启发。欢迎关注,点赞和转发。