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

目录

一、导入依赖

二、前端爬取页面数据

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')) # 组合方式: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后缀except Exception as e:print("异常报错信息: " + str(e))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo负载均衡

负载均衡策略与配置细节 Dubbo 内置了 client-based 负载均衡机制&#xff0c;如下是当前支持的负载均衡算法&#xff0c;结合上文提到的自动服务发现机制&#xff0c;消费端会自动使用 Weighted Random LoadBalance 加权随机负载均衡策略 选址调用。 如果要调整负载均衡算法…

软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式

目录 1. 工厂方法模式&#xff08;Factory Method Pattern&#xff09; 1.1 核心概念 1.2 应用场景 1.3 优点 2. 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 2.1 核心概念 2.2 应用场景 2.3 优点 3. 联系与区别 4. 拓展知识 5. 结语 在软件工程…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。

上图是在安防领域的要求&#xff0c;一般都是一个屏幕上有显示多个摄像头捕捉到的画面&#xff0c;这一节&#xff0c;我们是从文件中读取多个文件&#xff0c;显示在屏幕上。 一 改动UI文件 这里我们要添加两个label&#xff0c;为了区分我们设置一下背景色&#xff08;这个是…

java中线程与集合的面试题

在 Java 面试中&#xff0c;线程和集合相关的知识是非常常见的考察点。以下是几个典型的问题及答案&#xff1a; 线程相关面试题 什么是线程&#xff1f; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一个进程可以有多…

前言2、VS(Visual Studio)-2022使用

早前用VS-2010编译平台&#xff0c;进行C语言编程学习。 现如今&#xff0c;为了适应未来发展趋势以及日新月异的新功能&#xff0c;就此转到VS-2022编译平台&#xff1b; 由于都是VS编译平台&#xff0c;大多数基础功能都类似&#xff0c;关于一些基础操作可参考前言1&#…

深入了解逻辑回归:机器学习中的经典算法

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Tomcat(3) Tomcat是哪种类型的服务器?

Tomcat是一个开源的Java Servlet容器&#xff0c;同时也是一个轻量级的Web服务器。它主要用于实现Java Servlet和JavaServer Pages (JSP)规范&#xff0c;使得开发者能够部署和运行Java Web应用程序。 Tomcat的主要类型 1. Servlet容器 Tomcat的核心功能之一是作为Servlet容…

软件测试基础十四(python 类与对象)

类与对象的意义 面向对象编程的基础 模拟现实世界&#xff1a;在Python中&#xff0c;类和对象是面向对象编程&#xff08;OOP&#xff09;的核心概念。类就像是制造对象的蓝图或者模板&#xff0c;它定义了对象的属性&#xff08;数据成员&#xff09;和方法&#xff08;函数…

技术总结(二十二)

一、Redis缓存更新 在更新Redis缓存时&#xff0c;通常有两种策略&#xff1a; 更新缓存&#xff08;Cache-Aside Pattern&#xff09;&#xff1a;先从缓存获取数据&#xff0c;如果缓存中没有数据或数据已经过期&#xff0c;则从数据库中获取最新数据&#xff0c;并更新到缓…

[High Speed Serial ] Xilinx

Xilinx 高速串行数据接口 收发器产品涵盖了当今高速协议的方方面面。GTH 和 GTY 收发器提供要求苛刻的光互连所需的低抖动&#xff0c;并具有世界一流的自适应均衡功能&#xff0c;具有困难的背板操作所需的 PCS 功能。 Versal™ GTY &#xff08;32.75Gb/s&#xff09;&…

基于CNN-RNN的影像报告生成

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【PaddleNLP的FAQ问答机器人】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

Java的main方法static

在Java中&#xff0c;main方法是程序的入口方法。它必须是一个静态方法&#xff0c;这意味着它可以在程序的其他部分被直接调用&#xff0c;而不需要实例化类。使用静态方法的一个好处是它们可以直接通过类名调用&#xff0c;而不需要创建对象。 以下是main方法的典型声明&…

java list使用基本操作

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;public class Main {public static void main(String[] args) {ArrayList list new ArrayList();list.add("张三");list.add("李四");list.add("王五");l…

Java入门15——抽象类

今天我们来看抽象类和接口~话不多说&#xff0c;开始正题~ 在前面我们学习了继承&#xff0c;我们知道了父类是子类共有的属性&#xff0c;而且子类重写了父类的方法&#xff0c;父类里的方法就不会被具体的使用了&#xff0c;为了防止你不小心调用了父类里被子类重写方法的调用…

高级 <HarmonyOS主题课>借助AR引擎帮助应用实现虚拟与现实交互的能力的课后习题

持而盈之&#xff0c;不如其已&#xff1b; 揣而锐之&#xff0c;不可长保。 金玉满堂&#xff0c;莫之能守&#xff1b; 富贵而骄&#xff0c;自遗其咎。 功成身退&#xff0c;天之道也。 VR (Virtual Reality): 虚拟现实技术 AR (Augmented Reality): 增强现实) XR.(Extend…

高校实验室安全巡检系统设计与实现(源码+定制+开发)高校实验室巡检系统、实验室安全管理平台、实验室安全监控系统、智能实验室巡查系统、高校实验室风险管理

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

102、Python并发编程:Queue与生产者消费者模型实现解耦、协作

引言 在实际业务场景中&#xff0c;很多时候在处理复杂任务的时候&#xff0c;会拆分上下游各个环节&#xff0c;形成一个类似于流水线的处理方式。上游类似于生产者&#xff0c;下游要依赖上游的输出进行工作&#xff0c;类似于消费者。但是&#xff0c;很多时候&#xff0c;…

Bash Shell - 获取日期、时间

1. 使用date获取日期 以下代码将date的执行结果存储在today变量中。date 是获取日期和时间的命令。 选择使用 quotes()或$ #!/bin/bashtodaydate echo $todaytoday$(date) echo $today 2. 使用 Format 输出所需日期和时间 date FORMAT 2.1 "MM-DD-YY" 形式输出…

【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p38115 分析师:Yang Yang&#xff0c;Kechen Zhao 在当今科技日新月异的时代&#xff0c;数据的有效利用成为各领域突破发展的关键。于医疗领域&#xff0c;乳腺癌的高发性与严重性不容忽视&#xff0c;优化抗乳腺癌候选药物的筛选与特…

机器学习与AI|如何利用数据科学优化库存周转率?

对于所有零售商来说&#xff0c;良好的库存管理都是非常重要的。众所周知&#xff0c;商品如果不放在货架上就无法出售&#xff0c;而如果库存过多则意味着严重的财务负担。 但是做好库存管理绝非易事&#xff0c;它依赖于对未来需求的准确预测和确保始终有合适库存的敏捷供应链…