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

news2025/1/14 0:55:57

项目功能简介:

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 = 0
    my_timer = None
    refresh_counts = 0

    def __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 PyQt5

python3 main.py

开始打包

pyinstaller -F -w --name '知乎·热榜·可视化抓取' main.py (没有 main.spec 文件用此命令)
或者
pyinstaller main.spec (有 main.spec 文件可用此命令)

pyinstaller 打包完成后,项目的根目录下会自动生成一个 dist 目录,exe 文件就在此目录中,此时的 exe 可以单独拷贝到任何地方运行;运行 exe 文件之前务必看下面的“注意事项”。

五.获取完整源码

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

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

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

相关文章

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改,完美兼容小屏手机大屏手机,以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑,全自动网页制作系统无需繁琐的注册与登入,直接…

大创项目推荐 疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据全国疫情数据分析与3D可视化 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&#xff0…

AWS CI/CD之二:配置CodeDeploy

问题 前面一篇文章介绍了CodeBuild中构建一个Java的Maven项目。在这个基础上面,我们继续AWS CI/CD工作流构建之路。 1.配置CodePipeline简配版 这里主要是利用CodePipeline配置之前的CodeBuild项目,以便生产出需要部署的jar文件和CodeDeploy需要用到相…

手把手教你薅熊链Berachain测试网空投

Berachain,这名字响当当!是基于流动性证明的高性能区块链,结合了Tendermint和流动性共识证明,还采用了Celestia作为DA层。这速度快、成本低、确定性高,简直就是未来的大热门!你知道吗?这家公司可…

异步编程Completablefuture使用详解----入门篇

JDK版本:jdk17 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 一、CompletableFuture是什么?二、为什么要使用CompletableFuture?2.1 工具类准备2.2 Future的局限性2.3 CompletableFuture的优势 三、如何使用CompletableFuture?3.1 …

Web3艺术市场:NFT与数字创作的结合

在数字时代,随着区块链技术的崛起,一种新型数字资产,非同质化代币(NFT),正逐渐改变传统艺术市场的格局。这种数字化的艺术品售卖方式成为了Web3艺术市场的代表,推动着数字创作与艺术市场的结合。…

day05_java中的流程控制

概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执 行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 流程控制语句又分为: 顺序结构 丶分支结构丶…

性能优化-HVX架构简介

来自 「发表于知乎专栏《移动端算法优化》」 本文主要介绍Hexagon DSP的HVX技术,旨在通过简单的语言讲清HVX技术。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开…

vue3 + antd 封装动态表单组件(一)

前置条件: vue版本 v3.3.11 ant-design-vue版本 v4.1.1 创建动态组件配置文件config.js import { Input, Textarea, InputNumber, Select, RadioGroup, CheckboxGroup, DatePicker } from ant-design-vue;// 表单域组件类型 export const componentsMap {Text: …

编译poco库出现的问题及其解决办法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 使用vs2015编译poco库出现问题:error C3688: invalid literal suffix ‘I64_FMT’; literal operator or literal operator template ‘opera…

大模型:我也会自监督学习~

前言 当下大模型的能力已经很强了,但是将来我们想要的是能力更强的大模型,其最好能够处理各种复杂问题也即强对齐模型。 之前大模型训练的监督信号主要来源于人类反馈,但是如果想要训练一个强对齐模型必然就需要一个对应的强监督信号&#…

第二篇【传奇开心果系列】Vant 开发移动应用:开发常见页面

传奇开心果博文系列 Vant of Vue 开发移动应用示例系列博文博文目录一、常见页面的重要作用二、常见页面介绍三、分别示例代码四、常见页面样式示例代码五、主要知识点总结 Vant of Vue 开发移动应用示例系列博文 博文目录 一、常见页面的重要作用 常见页面在移动应用中扮演…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员&#xf…

算法第二十一天-丑数

丑数 题目要求 解题思路 首先判断数字是不是为0或者负数&#xff0c;两者均不可能成为丑数&#xff1b; 之后对n进行不断整除&#xff0c;直到无法除尽为止。 简单判断最后的数是不是1即可。 代码 class Solution:def isUgly(self, n: int) -> bool:if n<0:return Fa…

linux perf工具使用

参考文章Linux性能调优之perf使用方法_perf交叉编译-CSDN博客 perf是一款Linux性能分析工具。比如打流性能优化的时候&#xff0c;就能够看到是哪些函数消耗的cpu高 那么linux如何编译perf工具呢&#xff1f; perf工具编译 进入perf目录下linux-3.16/tools/perf make ARCH…

线程状态转换

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳中求进&#xff0c;晒太阳 程状态转换 假设有线程Thread t 情况1 new-->RUNNABLE 当调用t.start()方法时&#xff0c;由new ->RUNNABLE 情况2 RUNNABLE WAITING t…

Spark On Hive配置测试及分布式SQL ThriftServer配置

文章目录 Spark On Hive的原理及配置配置步骤在代码中集成Spark On Hive Spark分布式SQL执行原理及配置配置步骤在代码中集成Spark JDBC ThriftServer 总结 Spark On Hive的原理及配置 Spark本身是一个执行引擎&#xff0c;而没有管理metadate的能力&#xff0c;当我们在执行S…

Redis原理篇(SkipList)

一.概述 本质是双端链表&#xff0c;只不过在正向遍历时可以不一个一个遍历&#xff0c;而是可以跳着遍历。 怎么实现的呢&#xff0c;下面是SkipList源码 二.源码 1. zskiplist 意义&#xff1a;跳表 zskiplist里面有头指针和尾指针&#xff0c;节点数量&#xff0c;最大…

Python自动化测试【selenium面试题】

一、selenium中如何判断元素是否存在&#xff1f; expected_conditions模块提供了16种判断方法&#xff0c;以下方法是判断元素存在DOM中&#xff1a; presence_of_element_located """ An expectation for checking that an element is present on the DOM of…

第二百七十八回

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容&#xff0c;本章回中将介绍DropdownMenu组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…