【2023微博评论爬虫】用python爬上千条微博评论,突破15页限制!

news2024/11/28 8:30:31

文章目录

  • 一、爬取目标
  • 二、展示爬取结果
  • 三、爬虫代码
  • 四、同步视频
  • 五、获取完整源码

您好,我是 @马哥python说,一枚10年程序猿。

一、爬取目标

前些天我分享过一篇微博的爬虫:
马哥python说:【python爬虫案例】爬取微博任意搜索关键词的结果,以“唐山打人”为例

但我的学习群中的小伙伴频繁讨论微博评论的爬取,所以,我们再分享这篇微博评论的爬虫。

注意区分这两个爬虫:
上次:爬指定搜索关键词的搜索结果的博文数据
本次:爬单一微博的微博下方评论数据

二、展示爬取结果

首先,看下部分爬取数据:
张天爱微博评论

爬取字段含:
微博id、评论页码、评论id、评论时间、评论点赞数、评论者IP归属地、评论者姓名、评论者id、评论者性别、评论者关注数、评论者粉丝数、评论内容。

三、爬虫代码

上次在文章中讲到,微博有3种访问方式,分别是:

PC端网页:https://weibo.com/
移动端:https://weibo.cn/
手机端:https://m.weibo.cn/

本次依然采用第3种访问方式爬取,即,通过手机端爬取。
打开张天爱的目标微博:https://m.weibo.cn/detail/4806418774099867
URL地址中的"4806418774099867"就是微博id了。
查看微博id和目标URL

cookie从哪里获取呢?看截图:
获取cookie

把微博id带入到Python爬虫代码中,下面展示部分爬虫代码。

关键逻辑来了!
关键逻辑来了!
关键逻辑来了!
重要的事情说三遍,外加敲黑板!!
关键逻辑:(非常关键!如果处理不好,就只能爬到第1页,很多小伙伴卡在这了)

max_id的处理:

if page == 1:  # 第一页,没有max_id参数
	url = 'https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id_type=0'.format(weibo_id, weibo_id)
else:  # 非第一页,需要max_id参数
	if max_id == '0':  # 如果发现max_id为0,说明没有下一页了,break结束循环
		print('max_id is 0, break now')
		break
	url = 'https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id_type=0&max_id={}'.format(weibo_id,
	                                                                                        weibo_id,
	                                                                                        max_id)

如果是第一页,不用传max_id参数。
如果非第一页,需要传max_id参数,它的值来自于上一页的r.json()[‘data’][‘max_id’]
下面,就是正常爬虫逻辑了。

首先,向微博页面发送请求:

r = requests.get(url, headers=headers)  # 发送请求
print(r.status_code)  # 查看响应码
print(r.json())  # 查看响应内容

下面,是解析数据的处理逻辑:

datas = r.json()['data']['data']
for data in datas:
	page_list.append(page)
	id_list.append(data['id'])
	dr = re.compile(r'<[^>]+>', re.S)  # 用正则表达式清洗评论数据
	text2 = dr.sub('', data['text'])
	text_list.append(text2)  # 评论内容
	time_list.append(trans_time(v_str=data['created_at']))  # 评论时间
	like_count_list.append(data['like_count'])  # 评论点赞数
	source_list.append(data['source'])  # 评论者IP归属地
	user_name_list.append(data['user']['screen_name'])  # 评论者姓名
	user_id_list.append(data['user']['id'])  # 评论者id
	user_gender_list.append(tran_gender(data['user']['gender']))  # 评论者性别
	follow_count_list.append(data['user']['follow_count'])  # 评论者关注数
	followers_count_list.append(data['user']['followers_count'])  # 评论者粉丝数

最后,是保存数据的处理逻辑:

df = pd.DataFrame(
	{
		'微博id': [weibo_id] * len(time_list),
		'评论页码': page_list,
		'评论id': id_list,
		'评论时间': time_list,
		'评论点赞数': like_count_list,
		'评论者IP归属地': source_list,
		'评论者姓名': user_name_list,
		'评论者id': user_id_list,
		'评论者性别': user_gender_list,
		'评论者关注数': follow_count_list,
		'评论者粉丝数': followers_count_list,
		'评论内容': text_list,
	}
)
if os.path.exists(v_comment_file):  # 如果文件存在,不再设置表头
	header = False
else:  # 否则,设置csv文件表头
	header = True
# 保存csv文件
df.to_csv(v_comment_file, mode='a+', index=False, header=header, encoding='utf_8_sig')
print('结果保存成功:{}'.format(v_comment_file))

篇幅有限,请求头、cookie、循环页码、数据清洗等其他细节不再赘述。

四、同步视频

详细讲解源码:
【2023微博评论爬虫】详细讲解用python爬几千条微博评论数据!

五、获取完整源码

附完整源码:【2023微博评论爬虫】用python爬上千条微博评论,突破15页限制!


推荐阅读:

微博评论分析大屏:马哥python说:【技术流吃瓜】python大屏分析"张天爱"微博网友评论

爬微博搜索结果:马哥python说:【python爬虫案例】爬取微博任意搜索关键词的结果,以“唐山打人”为例


我是马哥python说 ,一名10年程序猿,持续分享python干货中!

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

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

相关文章

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…

【JavaSpring】spring接口-beanfactory和applicationcontext与事件解耦

beanfactory 1.applicationcontext的父接口 2.是Spring的核心容器 功能 表面只有getBean&#xff0c;但实现类默默发挥了巨大作用 1.管理所有bean 2.控制反转 3.基本的依赖注入 applicationcontext 功能 1.继承了MessageSource&#xff0c;有了处理国际化资源的能力 …

【C++】继承基础知识一遍过

目录 一&#xff0c;概念 二&#xff0c;继承定义 1. 继承格式 2. 访问限定符与继承方式的关系 3. 继承父类成员访问方式的变化 小结&#xff1a; 三. 父类与子类对象赋值转化 四&#xff0c;继承作用域 1.特点 2. 测试题 五&#xff0c;派生类不一样的默认成员函…

【nacos】2.1.1持续输出事件警告日志

nacos-server 2.1.1 持续输出事件警告日志,修复NamingTraceEvent连续打印日志。这是 2.1.1 beta 功能跟踪事件。如果没有订阅者处理TraceEvent&#xff0c;将打印此日志。2.1.1版本中忽略它&#xff0c;我们将在2.1.2版本中对其进行增强。 WARN There are no [com.alibaba.nac…

Linux系统中驱动之设备树的platform驱动实现

每日一个简单的驱动&#xff0c;日久方长&#xff0c;对Linux驱动就越来越熟悉&#xff0c;也越来容易学会写驱动程序。今日进行设备树下的platform设备驱动。 前面一篇我们讲解了传统的、未采用设备树的 platform 设备和驱动编写方法。最新的 Linux 内核已经支持了设备树&…

c语言练习45:模拟实现内存函数memcpy

模拟实现内存函数memcpy 针对内存块&#xff0c;不在乎内存中的数据。 拷贝内容有重叠的话应用memmove 模拟实现&#xff1a; 代码&#xff1a; 模拟实现memcpy #include<stdio.h> #include<assert.h> void* my_memcpy(void* dest, const void* src, size_t num…

【计算机基础知识3】IP 地址和子网掩码、DNS、HTTP

目录 前言 一、IP地址和子网掩码 1. IP地址的概念 2. IP地址的分类 3. 子网掩码的概念 4. 子网掩码的用途 二、域名系统&#xff08;DNS&#xff09; 1. DNS的作用 2. 域名解析过程 3. 如何配置和管理域名解析 三、HTTP&#xff08;超文本传输协议&#xff09; 1. H…

Pytest系列-测试用例前后置固件setup和teardown的介绍和使用(2)

简介 在unittest框架中&#xff0c;有两个前置方法&#xff0c;两个后置方法&#xff0c;还有两个模块方法&#xff0c;分别是 setup()&#xff1a;每个用例执行之前都会自动调用setupClass()&#xff1a;在类中所有的测试方法执行前会自动执行的代码&#xff0c;只执行一次t…

华为云中对象存储服务软件开发工具包(OBS SDK) C语言介绍

华为云的OBS介绍&#xff1a;摘自华为云官网&#xff1a;https://support.huaweicloud.com/obs/index.html 华为云的对象存储服务(Object Storage Service&#xff0c;OBS)是一个基于对象的海量存储服务&#xff0c;为客户提供海量、安全、高可靠、低成本的数据存储能力。 …

华为云云耀云服务器L实例评测|在Docker环境下部署Statping服务器监控工具

华为云云耀云服务器L实例评测&#xff5c;在Docker环境下部署Statping服务器监控工具 一、前言1.1 云耀云服务器L实例简介1.2 Statping简介1.3 Statping特点 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、购买云耀云服务器L实例3.1 购买云耀云服务器L实例3.3 查看云耀…

商汤科技AGI这些年:上半场「基建」,下半场「变现」

【潮汐商业评论/原创】 纵观一次次科技革命引领的生产力变革&#xff0c;都绝非一蹴而就&#xff0c;而是在不断的技术突破中&#xff0c;找到产业的落脚点&#xff0c;再回归到社会应用中去。 当下的人工智能也是如此。今年以来&#xff0c;大模型和生成式AI作为重要的科技突…

OpenCV项目实战(1)— 如何去截取视频中的帧

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。针对一段视频&#xff0c;如何去截取视频中的帧呢&#xff1f;本节课就给大家介绍两种方式&#xff0c;一种方式是按一定间隔来截取视频帧&#xff0c;另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获&#x…

无涯教程-JavaScript - IMSIN函数

描述 IMSIN函数以x yi或x yj文本格式返回复数的正弦。复数的正弦为- $$\sin(x yi) \sin(x)\cosh(y) \cos(x)\sin(y)i $$ 语法 IMSIN (inumber)争论 Argument描述Required/OptionalInumberA Complex Number for which you want the sine.Required Notes Excel中的复数仅…

python-55-打包exe执行

目录 前言一、pyinstaller二、实践打包exe1、遇坑1&#xff1a;Plugin already registered2、遇坑2&#xff1a;OSError 句柄无效 三、总结 前言 你是否有这种烦恼&#xff1f; 别人在使用你的项目时可能还需要安装各种依赖包&#xff1f;别人在使用你的项目&#xff0c;可能…

Bean 的生命周期总结

目录 一、Bean生命周期的五个阶段 Bean的初始化 二、PostConstruct 和 PreDestroy 各自的效果 三、 实例化和初始化的区别 四、为什么要先设置属性在进⾏初始化呢&#xff1f; 一、Bean生命周期的五个阶段 Java 中的公共类称之为 Bean 或 Java Bean&#xff0c;而 Spring 中的…

深度学习的数值问题

文章目录 梯度下降临界点、驻点、拐点、鞍点、顶点&#xff08;曲线&#xff09;、曲率近似优化预测最佳步长 梯度下降 往斜率的反方向走。 临界点、驻点、拐点、鞍点、顶点&#xff08;曲线&#xff09;、曲率 临界点&#xff1a;在数学中&#xff0c;临界点是指函数的导数为…

【APISIX】W10安装APISIX

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关&#xff0c;提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。以下简单介绍Windows下借助Docker Desktop来安装APISIX。 具体应用场景可参考官网&#xff08;https://apisix.…

安科瑞铁塔基站能耗监控解决方案

安科瑞 华楠 1 背景概述 5G发展&#xff0c;基站先行。5G基站的选址建设&#xff0c;是保证5G信号覆盖的基础&#xff0c;因此5G基站建设是5G产业布局的一部分&#xff0c;也是5G成熟的基础。 2G、3G、4G均是低频段信号传输&#xff0c;宏基站几乎能应付所有的信号覆盖。但由…

Navicat Premium 16 安装及卸载

Navicat Premium 16 安装及卸载 文章目录 Navicat Premium 16 安装及卸载一 、简介二、下载三、安装四、使用五、卸载 一 、简介 Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、…

【HTML专栏4】常用标签(标题、段落、换行、文本格式化、注释及特殊字符)

本文属于HTML/CSS专栏文章&#xff0c;适合WEB前端开发入门学习&#xff0c;详细介绍HTML/CSS如果使用&#xff0c;如果对你有所帮助请一键三连支持&#xff0c;对博主系列文章感兴趣点击下方专栏了解详细。 博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;HTML/CS…