openpyxl 模块
一、openpyxl模块概述
特点:
- 1.可以读取和写入Excel
- 2.需要单独安装,不包含在Python标准库里
- 3.处理Excel数据
- 4.处理Excel公式
- 5.处理Excel样式
- 6.在表格内插入图表
安装与测试
- 安装:pip install openpyxl
- 测试:打开命令行,输入python>>>import openpyxl
二、Python操作Excel文件
(一)向Excel文件中写入数据
- 1.创建工作簿对象 openpyxl.Workbook()
- 2.获取活动工作表对象 wb.active
- 3.获取单元格 sheet[单元格名称]
- 4.向单元格中写入数据 cell.value = 值
- 5.向Excel中写入一行数据 sheet.append(列表)
- 6.保存Excel文件 wb.save(文件)
import openpyxl
#创建工作簿对象
wb = openpyxl.Workbook()
#获取工作表sheet
sheet = wb.active
#获取指定的单元格
cell = sheet['A1']
#向单元格中写入数值
cell.value = '美丽中国'
#一次写入一行数据
lst = ['姓名','年龄','成绩']
sheet.append(lst)
#一次写入多行数据
lst2 = [
['张三',23,76], #第一行
['李四',22,90], #第二行
['王五',21,89] #第三行
]
for row in lst2:
sheet.append(row)
#保存
wb.save('我的Excel文件.xlsx')
(二)从Excel文件中读取数据
- 1.加载工作簿对象 openpyxl.load_Workbook()
- 2.获取活动工作表对象 wb.active
- 3.获取单元格 sheet[单元格名称]
- 4.获取单元格的值 cell.value
- 5.获取一系列格子 sheet[‘A’],sheet[‘3’],sheet[‘A:C’]
- 6.获取整个表格的所有行 sheet.rows
import openpyxl
#加载Excel文件,实际上也是创建一个Python中的工作簿对象
wb = openpyxl.load_workbook('销售数据.xlsx')
#获取工作表对象
#sheet = wb.active #因为当前工作簿中只有这一个工作表,可以使用此种写法
sheet = wb['Sheet'] #如果一个工作簿中有多个工作表书写格式:wb['工作表名称']
#获取指定的单元格
cell = sheet['A1']
#获取指定单元格中的内容
value = cell.value
#print(value)
#获取一系列的格子
columns = sheet['A'] #获取A列,返回元组
for col in columns: #遍历元组,得到单元格
print(col.value) #输出每个单元格的值
#print(columns)
print('-------------------------------------------------------')
row = sheet[3] #获取第三行
for cell in row: #第三行中的每一个单元格
print(cell.value) #获取第三行每个单元格的值
#print(row)
print('--------------------------------------------------------')
cols = sheet['B:C'] #获取两列
for col in cols: #获取每一列
for cell in col: #获取每一个列中的单元格
print(cell.value) #获取每一个单元格的值
print('-----------------------------------------------------')
三、案例——爬取下厨房
获取请求数据
解析数据:获取数据所在的HTML标签
再进一步解析:食材原料
进一步解析:获取菜品链接
渠道完整链接:字符串拼接
food_url = 'http://www.xiachufang.com/'+lst_name[i].find('a')['href'] #获取菜品链接
存储数据
lst.append([count,lst_name[i].text,lst_category[i].text,food_url])
调整格式:存储时切片
lst.append([count,lst_name[i].text[18:-14],lst_category[i].text[1:-1],food_url])
将数据存储到Excel中
def save(lat):
'''将数据存储到Excel文件中'''
wb = openpyxl.Workbook()
sheet = wb.active
for row in lst:
sheet.append(row)
wb.save('下厨房美食.xlsx')
完整代码
import requests
import openpyxl
from bs4 import BeautifulSoup
def send_tuquests():
url = 'https://www.xiachufang.com/explore/'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}
resp = requests.get(url,headers=headers)
return resp.text
def parse_html(html):
'''解析数据'''
count = 0 #计数,Excel表中的第一列序号
#创建bf对象
bs = BeautifulSoup(html,'lxml')
#查找名为name的p标签
lst_name = bs.find_all('p',class_='name')
lst_category = bs.find_all('p',class_='ing ellipsis')
#print(lst_name)
#print(lst_category)
lst = [] #用于存储解析好的数据列表
for i in range(len(lst_name)):
count+=1
food_url = 'http://www.xiachufang.com/'+lst_name[i].find('a')['href'] #获取菜品链接
#print(food_url)
lst.append([count,lst_name[i].text[18:-14],lst_category[i].text[1:-1],food_url])
#print(lst)
save(lst)
def save(lst):
'''将数据存储到Excel文件中'''
wb = openpyxl.Workbook()
sheet = wb.active
for row in lst:
sheet.append(row)
wb.save('下厨房美食.xlsx')
def start():
result = send_tuquests()
parse_html(result)
if __name__ == '__main__':
start()