目录
一、导入依赖
二、前端爬取页面数据
1. html 中
2. js 中
三、后端获取数据,并存储到 Excel 文件中
1. 后端接收数据
2. 后端存储数据
(1)系统代码固定存储位置
(2)用户可选择文件对话框的存储位置
一、导入依赖
存储 Excel 文件所需依赖:xlwt
使用 pypi 下载依赖后,安装命令:
pip install xlwt-1.3.0-py2.py3-none-any.whl
pypi 的使用教程,可参考文章:Backend - PyPI 使用教程-CSDN博客
二、前端爬取页面数据
1. html 中
<input type="button" id="id_down_btn" value="Down" />
<table id="tb_book"><thead></thead> <tbody></tbody>
</table>
2. js 中
// 获取table中所有thead标题行的值,返回一维列表
function get_thead_data(tb_id) {var thead_list = [];var tb_id = '#' + tb_id;$(tb_id).find('tr').each(function () {$(this).find('th').each(function () { // 遍历标题行的th单元格thead_list.push($(this).find('div').html());});});return thead_list
}// 获取table中所有tbody内容行的值,返回二维列表
function get_tbody_data(tb_id) {var rows_list = [];var tb_id = '#' + tb_id;$(tb_id).find('tr').each(function () { // 遍历每行var onerow_list = []; // 单行$(this).find('td').each(function () { // 遍历每行的td单元格var onerow_text = $(this).html(); // 先判断tbody内容是否为空if (onerow_text == 'No data available in table') {return false} else {onerow_list.push($(this).html()) // 单行存储每个单元格}});if (onerow_list.length > 0) {rows_list.push(onerow_list) // 整个二维列表存储每行}});return rows_list
}// 执行下载
$("#id_down_btn").click(function () {let thead_list = get_thead_data("tb_book"); // 获取标题(一维列表)let tbody_list = get_tbody_data("tb_book"); // 获取内容(二维列表)tbody_list.unshift(thead_list) // 将标题列表插入到内容列表开头$.ajax({url: window.location.pathname, // 获取当前路由type: 'POST',data:{'tb_data': JSON.stringify(tbody_list)},success: function(reply){if(reply.res){console.log(reply.data);}}})
});
三、后端获取数据,并存储到 Excel 文件中
1. 后端接收数据
get_post_data = request.POST
tb_data = json.loads(get_post_data['tb_data'])
down_excel(tb_data, '工作表名', 'D:/Excel文件名.xls')
2. 后端存储数据
(1)系统代码固定存储位置
import xlwt # 导入xlwt模块
def down_excel(rows_data, sheet_name='sheet1', save_url=None):'''创建工作簿@rows_data 存储的内容 [['AAA', 'BBB', 'CCC', 'DDD'], ['AAA', 'BBB', 'CCC', 'DDD']] @sheet_name 表名 '书籍表'@save_url 存储的文件路径,若无值则弹窗提示用户自定义选择位置,若有值则传入格式为字串的值,如 'D:/savefile.xls' '''try:if save_url: # 若设好文件存储位置wbook = xlwt.Workbook(encoding='utf-8') # 创建工作簿sheet1 = wbook.add_sheet(sheet_name, cell_overwrite_ok=False) # 创建sheet对象,给工作簿添加一个表,cell_overwrite_ok设置True,作用是覆盖单元格,避免重复编辑同个单元格而报错for i in range(0,len(rows_data)): # 先遍历每行for j in range(0,len(rows_data[i])): # 再遍历每列sheet1.write(i, j, rows_data[i][j]) # 第一个参数:行数,第二个参数:列数,第三个参数:写入单元格数据wbook.save(save_url) # 保存工作簿,微软用xls后缀except Exception as e:print("异常报错信息: " + str(e))
(2)用户可选择文件对话框的存储位置
import xlwt # 存储Excel
import easygui # 打开文件对话框
from datetime import datetimedef down_excel(rows_data, sheet_name='工作表1', save_url=None):'''创建工作簿@rows_data 存储的内容 [['AAA', 'BBB', 'CCC', 'DDD'], ['AAA', 'BBB', 'CCC', 'DDD']] @sheet_name 表名 '书籍表'@save_url 存储的文件路径,若无值则弹窗提示用户自定义选择位置,若有值则传入格式为字串的值,如 'D:/savefile.xls' '''try:if not save_url: # 设置存储文件位置default_filename = 'D:\\{}_{}'.format(sheet_name, datetime.now().strftime('%Y%m%d%H%M%S')) # 组合方式:D盘路径+工作表1的名称+当天日期save_url = easygui.filesavebox(title="请选择文件", default=default_filename, filetypes = ["*.xls"]) # 打开文件对话框(default设置默认打开的文件夹目录,filetypes设置文件后缀下拉选项)if save_url: # 若设好存储位置wbook = xlwt.Workbook(encoding='utf-8') # 创建工作簿sheet1 = wbook.add_sheet(sheet_name, cell_overwrite_ok=False) # 创建sheet对象,给工作簿添加一个表,cell_overwrite_ok设置True,作用是覆盖单元格,避免重复编辑同个单元格而报错for i in range(0,len(rows_data)): # 先遍历每行for j in range(0,len(rows_data[i])): # 再遍历每列sheet1.write(i, j, rows_data[i][j]) # 第一个参数:行数,第二个参数:列数,第三个参数:写入单元格数据wbook.save(save_url+'.xls') # 保存工作簿,微软用xls后缀(注意save时,若文件已存在,将会完全覆盖)except Exception as e:print("异常报错信息: " + str(e))