Backend - Python 爬取网页数据并保存在Excel文件中

目录

一、导入依赖

二、前端爬取页面数据

[1. html 中](#1. html 中)

[2. js 中](#2. js 中)

[三、后端获取数据,并存储到 Excel 文件中](#三、后端获取数据,并存储到 Excel 文件中)

[1. 后端接收数据](#1. 后端接收数据)

[2. 后端存储数据](#2. 后端存储数据)

(1)系统代码固定存储位置

(2)用户可选择文件对话框的存储位置


一、导入依赖

存储 Excel 文件所需依赖:xlwt

使用 pypi 下载依赖后,安装命令:

python 复制代码
pip install xlwt-1.3.0-py2.py3-none-any.whl

pypi 的使用教程,可参考文章:Backend - PyPI 使用教程-CSDN博客

二、前端爬取页面数据

1. html 中

html 复制代码
<input type="button" id="id_down_btn" value="Down" />
<table id="tb_book">
       <thead></thead> <tbody></tbody>
</table>

2. js 中

javascript 复制代码
// 获取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. 后端接收数据

python 复制代码
get_post_data = request.POST
tb_data = json.loads(get_post_data['tb_data'])
down_excel(tb_data, '工作表名', 'D:/Excel文件名.xls')

2. 后端存储数据

(1)系统代码固定存储位置
python 复制代码
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)用户可选择文件对话框的存储位置
python 复制代码
import xlwt # 存储Excel
import easygui # 打开文件对话框
from datetime import datetime

def 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))
相关推荐
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
蓝天星空4 小时前
Python调用open ai接口
人工智能·python
jasmine s4 小时前
Pandas
开发语言·python
郭wes代码4 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf4 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零14 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound5 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe5 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机