Python操作Excel文件

概要

  • python操作表格

  • 爬取豆瓣电影top250数据并写入表格


详情

  • python操作表格

openpyxl模块

1.excel文件的后缀名有两种,03版本之前为.xls,03版本之后为.xlsx

2、能利用Python代码操作Excel表格文件的模块有很多

(1).openpyxl模块:近几年较流行,可用于操作03年之后的版本,对于老版本的兼容性不好

(2).xlrd、xlwt模块:分别控制Excel文件的读和写,可操作任何版本的表格

3、Excel本质并不是一个文件,通过将其后缀改为.zip可知,是由多个文件组成的文件夹,类似于网页

# openpyxl模块并不是内置模块,需要从其他地址下载
pip3 install openpyxl

创建文件

# 首先需要引入模块的创建Excel表格文件的方法
from openpyxl import Workbook
# 1.创建一个Workbook对象(Excel文件)
wb = Workbook
# 2.创建工作表(一个或多个)
ws1 = wb1.create_sheet('第一张表')
ws2 = wb1.create_sheet('第二张表')
# 3.保存文件
wb.save(r'001.xlsx')

# 创建工作表的时候可以指定顺序
ws3 = wb1.create_sheet('第三张表', 0)

# create_sheet方法返回当前被创建的工作表对象
1.可以二次修改工作表名字
ws3.title = '表名被改了哦!'
2.可以修改工作表名称的样式
ws3.sheet_properties.tabColor = "1072BA"
3.可以查看当前excel文件所有的工作表名称,返回列表
print(wb1.sheetnames)

创建表相当于文件操作中的写模式(w),会将原有内容全部删除再重新创建新内容!!!

向Excel表格文件写入数据

# 引入创建Excel表格文件的方法
from openpyxl import Workbook
# 创建一个Workbook对象(Excel文件)
wb2 = Workbook()
ws2 = wb.create_sheet('数据统计', 0)
写入方式1
    工作表对象名['单元格名'] = 值
    eg:    ws2['A1'] = 111   
        ws2['A2'] = 222
写入方式2 # cell表示单元格对象
    工作表对象名.cell(column=列序, row=行序, value=值)
    eg: ws2.cell(column=2, row=3, value=2233)
写入方式3 # 适用于批量写入数据,空值用None或者''代替
    工作表对象名.append([列1, 列2, 列3, 列4])
    eg: ws2.append(['序号', '姓名', '年龄', '性别'])
        ws2.append([1, 'Leoric', '', 'male'])
        ws2.append([2, None, 18, 'female'])
    '''append方法按照行录入数据'''
    也可以写入计算公式
    eg: ws2['A9'] = '=SUM(A2:A8)'
# 保存文件
wb2.save(r'002.xlsx')

从Excel表格文件读取数据

# 引入加载Excel表格文件的方法
from openpyxl import load_workbook
# 1.指定要读取的Excel表格文件
rb = load_workbook(r'2.xlsx')
# 2.查看全部工作表名,选择要操作的表
print(rb.sheetnames)
# 3.指定要操作的工作表
ws3 = rb['数据统计']
读取方式1
    工作表对象名['单元格名'].value
    eg: ws3['B3'].value        # 2233
        ws3['A9'].value        # =SUM(A2:A8)
读取方式2
    工作表对象名.cell(row=行序,column=列序).value
***************************************************    
按行读取
for row in ws3.rows:
    for r in row:
        print(r.value)
按列读取
for col in ws3.columns:
    for c in col:
        print(c.value)
        

 


  •  爬取豆瓣电影top250数据并写入表格

1.先查看网页源代码,发现电影主要信息都在源代码中,说明这部分数据是直接加载的,向其发送get请求
2.分析返回的页面,利用bs4模块或者正则表达式筛选数据即可
3.将筛选出的字段利用openpyxl模块写入Excel文件
4.分析切换页的地址变化,只有表示起始位置的参数不同
5.外层添加for循环即可

import time
from openpyxl import Workbook
import requests
from bs4 import BeautifulSoup
import re


def getMovies(n, ws):
    """
        获得豆瓣电影top250
        参数 n: 页码
    """
    # 1.指定基础网址
    baseUrl = 'https://movie.douban.com/top250?start={}'.format(n * 25)
    # 2.发送get请求获得豆瓣电影top250首页
    res = requests.get(baseUrl,
                        headers={
                            'referer': 'https://movie.douban.com/top250?start=0',
                            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
                        })
    # 3.构造针对豆瓣电影top250首页的解析器
    soup = BeautifulSoup(res.text, 'lxml')
    # 4.获取电影列表的祖先标签 class为item的div标签
    divItemTags = soup.select('div.item')
    # 5.循环存放电影的li标签
    for movie in divItemTags:
        time.sleep(1)
        # 6.获取电影名称
        title = movie.span.text
        # 7.获取电影导演和主演混合的文本
        dmText = movie.select('div.bd')[0].p.text
        # 8.获取导演姓名
        director = re.findall('导演: (.*?) ', dmText)[0]
        # 9.获取主演姓名(可能为空)
        mainActor = ''
        if len(re.findall('主演: (.*?) ', dmText)) > 0:
            mainActor = re.findall('主演: (.*?) ', dmText)[0]
        # 10.获取评分
        ratingNum = movie.select('span.rating_num')[0].text
        # 11.获取评价人数
        ratingCount = movie.select('div.star span')[3].text
        # 12.获取座右铭(可能为空)
        motto = ''
        if len(movie.select('p.quote>span.inq')) > 0:
            motto = movie.select('p.quote>span.inq')[0].text
        # 13.将电影相关信息添加至excel文件相关表末尾
        ws.append([title, director, mainActor, ratingNum, ratingCount, motto])


"""爬取电影排行"""
# 1.新建excel文件对象
wbMovie = Workbook()
# 2.创建工作表
ws250 = wbMovie.create_sheet('豆瓣电影top250')
# 3.定义表头
ws250.append(['电影名称', '导演姓名', '主演姓名', '评分', '评价人数', '座右铭'])
# 4.输入需要的页数
pageNum = int(input('想看几页的电影排行:').strip())
# 5.调用方法
for page in range(pageNum):
    getMovies(int(page), ws250)
# 6.保存表格文件
wbMovie.save(r'豆瓣电影top250_{}.xlsx'.format(time.strftime('%Y-%m-%d')))
View Code

 

 

posted @ 2021-09-23 14:12  Leguan001  阅读(221)  评论(0)    收藏  举报