【爬虫实战】2024知乎热榜可视化爬取

项目功能简介:

1.支持配置;
2.单次爬取;
3.循环爬取;
4.爬虫暂停;
5.数据清除;
6.数据保存到csv文件;
7.程序支持打包成exe文件;
8.项目操作说明文档;
9.模块封装到类,方便学习、二次开发;

一.最终效果

1.1程序界面:

1.2保存数据到csv:

二.项目代码

2.1 编写界面

该脚本的界面使用PyQt5库开发,经过测试这个库的运行时性能要优于Tkinter,特别是实在多数据数据表单滑动,Tkinter卡顿太严重,因此我们使用性能出色的PyQt5来实现,界面编写过程大致如下:

class MyForm(QWidget):update_table_signal = pyqtSignal(dict)current_row = 0my_timer = Nonerefresh_counts = 0def __init__(self):super().__init__()self.thread_pool = QThreadPool()self.form_data = {}...def initUI(self):# 设置窗口属性self.setGeometry(100, 100, 1000, 600)self.setWindowTitle('知乎·热榜·可视化抓取')self.center_on_screen()# 在垂直布局中添加第一排和第二排的水平布局self.layout = QVBoxLayout()# 第二排self.layout_row2 = QHBoxLayout()self.btn_start = QPushButton('开始采集')self.btn_stop = QPushButton('停止采集')self.btn_stop.setEnabled(False)self.label_counts = QLabel('每隔多久重新采集一次')self.layout.addLayout(self.layout_row2)self.table = QTableWidget(self)...
2.2 配置

请求数据需要的headers、cookies、请求url都在config.json文件中配置,如下图:

2.3 操作说明

1.不输入时间间隔默认为单次采集,输入后会以秒为单位重复采集;

2.重复采集时会如果热榜有更新,会增量更新,例如最新一次的数据与前一次的数据有不同的A数据,则A数据会增量更新到结果中;如果数据A已经存在,则用最新的数据更新A,而不会在csv中新增一行;

3.“停止按钮”按钮被点击后,会等待正在爬取的行为完成后停止后续爬取行为(可根据按钮是否可点击指示操作即可!)

三.保存数据

数据保存继续使用pandas库,安装: pip install pandas,使用pandas保存,用法如下:

    def data_to_save(self, data_list):# 创建 DataFrame 对象df = pd.DataFrame(data_list)# 检查是否有文件has_file = self.check_data()if not has_file:# 不存在则添加df.to_csv(self.file_path, index=False, columns=["titleArea", "metricsArea", "answerCount", "link", "excerptArea"])return# 读取文件exist_df = pd.read_csv(self.file_path)# 合并数据merged_df = pd.merge(exist_df, df, on="link", how="outer")# 去重merged_df = merged_df.drop_duplicates(subset="link", keep="last")...

代码中已添加注释,方便初学者理解

四.项目说明文档

安装 python3

到官网下载 python 3.8.x 版本安装包,根据提示安装(windows 请勾选添加环境变量复选框)

注意:python3.8.x,不能是 3.9+(否则 pyinstaller 打包时可能报错)

本地运行

pip install pandas bs4 PyQt5python3 main.py

开始打包

pyinstaller -F -w --name '知乎·热榜·可视化抓取' main.py (没有 main.spec 文件用此命令)
或者
pyinstaller main.spec (有 main.spec 文件可用此命令)pyinstaller 打包完成后,项目的根目录下会自动生成一个 dist 目录,exe 文件就在此目录中,此时的 exe 可以单独拷贝到任何地方运行;运行 exe 文件之前务必看下面的“注意事项”。

五.获取完整源码

爱学习的小伙伴,本次案例的完整源码,已上传微信公众号:一个努力奔跑的snail,后台回复 知乎热榜 即可获取。

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

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

相关文章

Vue中的组件

在应用程序的开发中,组件是不可缺少的。在Vue的使用中,同样也会用到组件。   1、组件的名字唯一;   2、组件以Html形式书写;   3、组件可以复用;   4、组件可以嵌套;   5、组件可以相互调用&…

Docker(七)使用网络

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Docker 中的网络功能介绍 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。 一、外部访问容器 容器中可以运行一些网络应用&…

【计算机网络】2、传输介质、通信方向、通信方式、交换方式、IP地址表示、子网划分

文章目录 传输介质双绞线无屏蔽双绞线UTP屏蔽双绞线STP 网线光纤多模光纤MMF单模光纤SMF 无线信道无线电波红外光波 通信方向单工半双工全双工 通信方式异步传输同步传输串行传输并行传输 交换方式电路交换报文交换分组交换 IP地址表示IP地址的定义IP地址的分类无分类编址特殊I…

NVIDIA 大模型 RAG 分享笔记

文章目录 大语言模型在垂直领域落地的三个挑战:什么是 RAG以及为什么能解决大预言模型所带来的的这三个问题RAG 不是一项技术而是整体的 Pipeline非参数化 :数据库部分加载到数据库中检索阶段 提升检索效率的技术检索前:对query做处理use que…

2024年MacBookPro电脑数据恢复软件EasyRecovery数据恢复

前天新入手了一台MacBook pro,第一次用Mac激动的心情简直难以言喻,可是随后这激动的心情顿时就烟消云散了,因为对Mac操作系统的不熟练,导致我删除了一份很重要的Word文件。MacBook pro如何恢复误删除的文件?就这件事我向朋友求助…

网站批量管理软件【最新免费】

在网站运营的过程中,站群软件成为提高效率、管理多个网站的得力助手。本文将专心分享三款卓越的站群软件,其中特别推荐147SEO软件,它不仅能够批量管理网站,还能自动更新原创文章,并主动推送各大搜索引擎。不论您运营何…

c语言空指针

系列文章目录 c语言空指针 c语言空指针 系列文章目录c语言空指针 c语言空指针 空指针 没有指向任何的地址(其指向0的地址) 空制指针就是指向内存编号为零的空间,操作该内存空间会报错,一般情况空指针用于程序条件判断 操作空指针 …

AIGC实战——深度学习 (Deep Learning, DL)

AIGC实战——深度学习 0. 前言1. 深度学习基本概念1.1 基本定义1.2 非结构化数据 2. 深度神经网络2.1 神经网络2.2 学习高级特征 3. TensorFlow 和 Keras4. 多层感知器 (MLP)4.1 准备数据4.2 构建模型4.3 检查模型4.4 编译模型4.5 训练模型4.6 评估模型 小结系列链接 0. 前言 …

【Vue】监watchEffect

watchEffect 监听所有响应式数据 在函数利用到哪个数据就监听哪个 <script setup>import { ref,computed,watchEffect} from vue let hbs ref([]); //装爱好的值let lengthOfHbsref(0);const publishHbsMessagecomputed(()>{return hbs.value.length>0?Yes:No}…

数据在内存中的存储(整型与浮点数类型)

目录 数据类型详细介绍 数据类型介绍 数据类型的基本归类 整型在内存中的存储 原码、反码、补码 ​编辑 大小端介绍 例题 浮点型在内存中的存储 常见的浮点数 浮点数存储的例子&#xff08;具体解析浮点数存储&#xff09; 解析最初的例题 数据类型详细介绍 数据类…

FPGA高端项目:Xilinx Artix7 系列FPGA纯verilog图像缩放工程解决方案 提供4套工程源码和技术支持

目录 1、前言版本更新说明给读者的一封信FPGA就业高端项目培训计划免责声明 2、相关方案推荐我这里已有的FPGA图像缩放方案本方案在Xilinx Kintex7 系列FPGA上的应用本方案在国产FPGA紫光同创系列上的应用本方案在国产FPGA高云系列上的应用 3、设计思路框架设计框图视频源选择o…

C语言使用了没定义的变量会有什么现象?

一、问题 变量在使⽤前都要进⾏定义&#xff0c;若没进⾏定义就使⽤&#xff0c;会出现什么现象&#xff1f; 二、解答 1、示例 // 试图使用未声明的变量a int main() {printf("%d", a); // 编译错误&#xff1a;变量a未声明return 0; } 以上代码会编译失败&…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载&#xff1a;https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注&#xff1a;如果2、3步报错&#xff0c;清除缓…

ClickHouse与Doris数据库比较

概述 都说“实践是检验真理的唯一标准”&#xff0c;光说不练假把式&#xff0c;那么本文就通过实际的测试来感受一下Doris和clickhouse在读写方面的性能差距&#xff0c;看看Doris盛名之下&#xff0c;是否真有屠龙之技&#xff1b;clickhouse长锋出鞘&#xff0c;是否敢缚苍…

JVM 如何判断一个对象可以被回收

Hi&#xff0c; 我是 浮生。 今天分享一道一线互联网公司必问的面试题。 ”JVM 如何判断一个对象可以被回收“ 关于这个问题&#xff0c;来看看高手的回答。 一、问题解析 在 JVM 里面&#xff0c;要判断一个对象是否可以被回收&#xff0c;最重要的是判断这个对象是否还在被…

Web3解密:区块链技术如何颠覆传统互联网

随着区块链技术的崛起&#xff0c;Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构&#xff0c;而是通过去中心化、透明、安全的特性&#xff0c;为用户带来更为开放和公正的互联网体验。本文将深入解密Web3&#xff0c;揭示区块链技术如何颠覆传统互联网的基…

mavros2的humble版本源码编译

源码获取 直接从github下载源码包mavros-2.6.0.tar.gz 拷贝到ubuntu22的树莓派中&#xff0c; 解压 tar -xf mavros-2.6.0.tar.gz进入项目中 cd mavros-2.6.0总共需要编译两个文件包 mavros mavros_msgs先编译mavros_msgs colcon build --packages-select mavros_msgs这步…

18. C++ static

1. 先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。&#xff08;static函数&#xff0c;static变量均可&#xff09; 当同时编译多个文件时&#xff0c;所有未加static前缀的全局变量和函数都具有全局可见性。 **如果加了static&#xff0c;就会对其它源文件隐藏。**利…

动态sql,关联查询

1、动态sql 1.2.1 sql标签 可以通过sql标签提高sql代码的复用性 定义代码片段 <sql id"sql_count">select count(*)</sql>使用代码片段 <select id"selectUserCount" resultType"String"><include refid"sql_coun…

ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务

有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警 ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务 无论哪种方式(IP列表,主机描述,或IP子网)创建维护…