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

news/2024/12/13 12:43:47

目录

一、导入依赖

二、前端爬取页面数据

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))

https://dhexx.cn/news/show-5459380.html

相关文章

Linux驱动开发(3):字符设备驱动

上一章节我们了解到什么是内核模块&#xff0c;模块的加载卸载详细过程以及内核模块的使用等内容。 本章&#xff0c;我们将学习驱动相关的概念&#xff0c;理解字符设备驱动程序的基本框架&#xff0c;并从源码上分析字符设备驱动实现和管理。 主要内容有如下五点&#xff1a;…

【linux学习2】linux基本命令行操作总结

系列文章目录 【linux学习1】原理以及应用 文章目录 系列文章目录前言Linux命令行操作-目录Linux命令行操作-关机Linux命令行操作-磁盘管理Linux命令行操作-文件管理Linux命令行操作-系统设置 前言 下面是参考资料&#xff1a; 菜鸟编程教程-Linux Linux命令大全 Linux命令行…

文件系统和日志管理 附实验:远程访问第一台虚拟机日志

文件系统和日志管理 文件系统&#xff1a;文件系统提供了一个接口&#xff0c;用户用来访问硬件设备&#xff08;硬盘&#xff09;。 硬件设备上对文件的管理 文件存储在硬盘上&#xff0c;硬盘最小的存储单位是512字节&#xff0c;扇区。 文件在硬盘上的最小存储单位&…

你需要了解的Android主题相关知识

在 Android 开发中&#xff0c;主题&#xff08;Theme&#xff09;是用于定义应用的视觉风格的一组样式集合。主题决定了应用的配色、字体样式、控件外观等&#xff0c;是整个应用的一致性视觉体验的重要组成部分。以下是对 Android 主题的全面介绍&#xff0c;包括主题的基础概…

Docker 常用命令详解(详细版)

Docker 是一个开源的容器化平台&#xff0c;它使得开发人员可以打包应用程序及其所有依赖项&#xff0c;并在任何环境中运行。Docker 提供了简单而强大的命令行工具来管理容器、镜像、网络等。本文将详细介绍 Docker 的常用命令及其使用方法。 1. 安装 Docker 在使用 Docker …

基于python的机器学习(一)—— 基础知识(Scikit-learn安装)

目录 一、机器学习基础 1.1 机器学习概述 1.2 监督学习、无监督学习和强化学习 1.3 聚类、分类、回归、标注 1.3.1 聚类 1.3.2 分类 1.3.3 回归 1.3.4 标注 1.4 机器学习、人工智能和数据挖掘 1.5 机器学习的三个要素 二、Scikit-learn 机器学习库 2.1 Scikit-lea…

Isaac Sim 14 物理学习(车辆动力学)

文章内容均来自博客文章、官方文档手册等 参考内容 Nvidia Isaac Sim代码编程 入门教程 2024&#xff08;7&#xff09;_isaac sim franka-CSDN博客 Python Bindings API — omni_physics 106.1 documentation Physics — Omniverse IsaacSim latest documentation Vehicle…

鸿萌数据迁移服务: 企业服务器整机在线热迁移, 实现不停机业务转移

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…

基于Prometheus的client_golang库实现应用的自定义可观测监控

文章目录 1. 安装client_golang库2. 编写可观测监控代码3. 运行效果4. jar、graalvm、golang编译运行版本对比 前文使用javagraalvm实现原生应用可观测监控&#xff1a; prometheus client_java实现进程的CPU、内存、IO、流量的可观测&#xff0c;但是部分java依赖包使用了复杂…

qt QTreeWidgetItem详解

1、概述 QTreeWidgetItem 是 Qt 框架中的一个类&#xff0c;专门用于在 QTreeWidget&#xff08;一个基于项的树形视图&#xff09;中表示单个节点&#xff08;或称为项&#xff09;。QTreeWidget 继承自 QAbstractItemView&#xff0c;而 QTreeWidgetItem 则作为树中的一个节…