【爬虫实战】2024微博·任意博主已发布的微博、自动翻页、多线程

news2024/12/30 4:06:27

大家好,应同学们私信要求,出一篇关于微博博主已发布的内容脚本可视化的案例,于是整理了一下,仅供学习参考。

项目功能简介:

1.可视化式配置;

2.任意博主;

3.自动翻页;

4.支持指定最大翻页页码;

5.数据保存到csv文件;

6.程序支持打包成exe文件;

7.项目操作说明文档;

8.多线程并发(根据系统内核数、输入的线程数、博主id数量,计算出最合理的最终线程数);

9.支持爬虫暂停;

10.预留数据库配置,方便二次开发;

11.界面逻辑与获取数据逻辑已拆分(支持无界面运行);

一.最终效果

参数校验:

运行过程:

保存数据到csv:

二.项目代码

2.1 编写界面

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

class MyForm(QWidget):
    update_table_signal = pyqtSignal(dict)

    def __init__(self):
        super().__init__()
        ...
        self.initUI()

    def initUI(self):

        # 设置窗口属性
        self.setGeometry(100, 100, 1000, 600)
        self.setWindowTitle('微博·任意博主已发布的所有微博·可视化爬虫')
        self.center_on_screen()

        # 在垂直布局中添加第一排和第二排的水平布局
        self.layout = QVBoxLayout()

        self.fileButton = QPushButton('选择用户ID文件(.csv)', self)
        self.fileButton.clicked.connect(self.openFileDialog)
        self.layout.addWidget(self.fileButton)

        self.directoryLabel = QLabel(self)  # 添加一个标签来显示用户选择的目录路径
        self.layout.addWidget(self.directoryLabel)

        # 第二排
        self.layout_row2 = QHBoxLayout()
        self.btn_start = QPushButton('开始采集')
        self.btn_stop = QPushButton('停止采集')
        self.btn_stop.setEnabled(False)
        self.label_delay = QLabel('延时')
        ...

三.批量保存数据

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

import pandas as pd
list = [
  {
  "uid":"",
  ...
  "mblogid":"",
  },{
  "nickname":"",
  ...
  "like":"",
  }
]
df = pd.DataFrame(list)
df.to_csv('result.csv', index=False, columns=["uid", 'mblogid', "nickname", "publish_time", "device_info", "weibo_content", "forward", "comment", "like"])

四.运行日志

多线程日志:

开始请求16441146541...
开始请求14080780731...
开始解析第1页数据...
数据保存中...
共有48271条:
开始解析第1页数据...
数据保存中...
共有163331条:
开始请求14080780732...
开始请求16441146542...
开始解析第2页数据...
数据保存中...
开始解析第2页数据...
数据保存中...
开始请求14080780733...
开始请求16441146543...
开始解析第3页数据...
数据保存中...
触发调试配置的最大页码数3,已停止当前用户ID的爬取!
开始解析第3页数据...
数据保存中...
触发调试配置的最大页码数3,已停止当前用户ID的爬取!
开始请求17115309111...
开始解析第1页数据...
数据保存中...
共有126988条:
开始请求17115309112...
开始解析第2页数据...
数据保存中...
开始请求17115309113...
开始解析第3页数据...
数据保存中...
触发调试配置的最大页码数3,已停止当前用户ID的爬取!

上面是在配置文件中配置了最大页码为3,可配置。设置-1时自动获取全部。

五.项目说明文档

项目说明

安装 python3

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

python 包管理器安装阿里云镜像源加速:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

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

本地运行

pip install pandas PyQt5

python3 main.py

开始打包

pyinstaller -F -w --name '微博·任意博主已发布的所有微博·可视化爬虫' main.py (没有 main.spec 文件用此命令)
或者
pyinstaller main.spec (有 main.spec 文件可用此命令)

六.获取完整源码

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

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

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

相关文章

Vue入门篇:概念,快速入门,插值表达式,核心特性,基本Vue指令

目录 1.Vue是什么2.快速入门3.插值表达式{{}}1.作用:2.语法:3.插值表达式的注意点: 4.Vue响应式核心特性5.Vue指令 1.Vue是什么 Vue是一个流行的JavaScript框架,用于构建用户界面。它是一种用于构建单页面应用程序(SPA)的渐进式框架&#xff…

Tcl学习笔记(三)——列表、数组、字典

目录 1.列表 创建、获取列表 添加、删除、替换列表元素 搜索列表元素、对列表元素排序 字符串和列表之间的转换 2.数组 创建数组 获取数组中的元素 删除数组中的元素 数组与列表之间的转换 3.字典 1.列表 列表是Tcl中一种数据结构,是元素的有序集合&…

[Qt网络编程]之获取基本网络信息

目录 前言 获取主机IP地址 获取主机 IP 地址和子网掩码 获取主机 MAC 地址 前言 获取主机的网络地址和接口信息是进行网络编程的第一步,也是网络编程的基础。Qt提供了网络接口类 QNetworkInterface、网络地址人口类 QNetworkAddressEntry 和主机地址类 QHostAd…

Windows 下最好用的流程图软件Visio

keywords: Visio 小问题记录 连接线箭头 如果在 Visio 2013/2016 里画流程图,发现连接线没有箭头,检查一下「设计」菜单里是否将主题设置成了「无主题」,如果是,取消掉就好了。 鼠标悬停提示 把鼠标悬停在图形上四周应该有几…

“手撕“三大特性之一的<继承>(上)

目录 一、为什么需要继承 二、什么是继承 三、继承怎么写 四、成员的访问 1.父类与子类的成员变量不同名 2.父类与子类的成员变量同名 3.父类与子类的成员方法不同名 4.父类与子类的成员方法同名 五、super关键字 一、为什么需要继承 先让我们看一段Java代码&#…

【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑

文章目录 一. AI中大语言模型的位置与技术发展1. 从AI到Transformer2. NLP:自然语言处理3. LLM大型语言模型:NLP的一种特定技术3.1. LLM定义3.2. LLM的技术发展3.2.1. n-gram模型3.2.2. RNN与LSTM 二. Transformer在LLM中脱颖而出1. Transformer架构能力…

不敢说懂你 - Glide硬核源码剖析

问题 Glide加载流程? Glide整体架构? Glide数据加载的来源? Glide缓存加载的流程? Glide线程切换原理? Glide如何感知Activity? Glide哪种情况会返回应用级的RequestManager? … 带着一些问题去阅读… 使用示例 本篇主要基于glide:4.12.0进行分析。下面是Gli…

[论文阅读链接]

CVPR2023:Learning Human-to-Robot Handovers from Point Clouds http://t.csdnimg.cn/OfSnShttp://t.csdnimg.cn/OfSnS仿真工具:dm_control: Software and Tasks for Continuous Control dm_control 翻译: Software and Tasks for Continuous Control…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问,是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构,能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

js 特定索引下拆分字符串并组建成新的字符串数据

要在特定索引处拆分字符串,请使用 slice 方法获取字符串的两个部分,例如 str.slice(0, index) 返回字符串的一部分,但不包括提供的索引,而 str.slice(index) 返回字符串的其余部分。 过程:我们创建一个可重用的变量&a…

Linux-用户管理类命令实训

查看根目录下有哪些内容 进入/tmp目录,以自己的学号建一个目录,并进入该目录 像是目前所在的目录 在当前目录下,建立权限为741的目录test1 在目录test1下建立目录test2/test3/test4 进入test2,删除目录test3/test4 (7&…

paddle.net怎么付款?paddle.net怎么订阅?

有需要的小伙伴可以使用Fomepay的卡进行订阅支付,我这里使用的是491090卡段,开卡步骤很简单,点击获取卡片 1、注册 2、填写姓名使用拼音或者英文名都可以 3、支付宝或者微信支付

JavaWeb-登录校验

会话技术 浏览器使用的是http协议,多次请求间数据是不能共享的,例如我们要去访问用户数据的接口,但这时候用户是否已经登入了呢?是不知道的,为了解决这个问题,于是引入了会话跟踪技术。 会话:…

一次Ambari安装记录

引言 Ambari是一个开源的Apache项目,它提供了一个直观易用的Web界面,用于管理、监控和配置Apache Hadoop集群。它是一个集群管理工具,可以帮助管理员轻松地部署、管理和监控Hadoop集群的各种组件,如HDFS、YARN、MapReduce、Hive、HBase等。通过Ambari,用户可以在集群中添…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成,帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述,并生成全新的图像,以满足特定的视觉需求。 主要功能 \1. 图像…

存储人视角:人工智能AI + 大模型

原文来自于知乎存储专栏: 存储人视角:人工智能AI 大模型 前沿 我的角色 背景 AI 出场 效果 一个宠娃狂魔 娃喜爱并有奥特曼玩具 她的奥特曼玩具会跳舞了 娃对我的崇拜和爱又多了一分......amazing 杭州网商路艾弗森 球队需要制作LOGO 形象生动…

【学习】对于加密接口、签名接口如何进行性能测试

随着科技的飞速发展,加密接口和签名接口在我们的日常生活中扮演着越来越重要的角色。从在线支付到信息安全,它们始终默默地守护着我们的数字世界。然而,随着应用场景的不断扩展,性能测试变得尤为重要。今天,让我们一起…

【6】mysql查询性能优化-关联子查询

【README】 0. 先说结论:一般用inner join来改写in和exist,用left join来改写not in,not exist;(本文会比较内连接,包含in子句的子查询,exist的性能 ) 1. 本文总结自高性能mysql 6…

PLC中连接外部现场设备和CPU的桥梁——输入/输出(I/O)模块

输入(Input)模块和输出(Output)模块简称为I/O模块,数字量(Digital,又称为开关量)输入模块和数字量输出模块简称为DI模块和DQ模块,模拟量(Analog)输…

求a+aa+aaa+……(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int a 0;int n 0;int i 0;int result 0;int tn 0;//提示用户&am…