首页 > 编程语言 >【爬虫实战】用python爬小红书某话题的笔记,以#杭州亚运会#为例

【爬虫实战】用python爬小红书某话题的笔记,以#杭州亚运会#为例

时间:2023-10-07 09:36:11浏览次数:37  
标签:为例 python 爬虫 page cursor 小红书 json data id

目录

一、爬取目标

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

最近的亚运会大家都看了吗。除了振奋人心,还主打一个爱憎分明(主要针对小日子和韩国),看了的小伙伴都懂得!

我用python爬取了小红书上 #杭州亚运会 这个话题下的所有笔记,目标如下:

爬取结果如下:
部分数据截图

共7个核心字段,含:

笔记标题, 笔记id, 笔记链接, 作者昵称, 作者id, 作者链接, 发布时间。

二、爬虫代码讲解

2.1 分析过程

核心思路,通过网页端分析接口数据实现。
点击手机客户端右上角分享按钮,然后选择复制链接,如下:
复制链接

把复制好的链接粘贴到电脑端浏览器,并打开开发者模式,如下:
打开开发者

页面往下滚动,刷出更多笔记数据,打开以notes开头的请求链接,查看预览数据:
查看预览数据

由此便得到了前端请求链接,下面开始开发爬虫代码。

2.2 爬虫代码

首先,导入需要用到的库:

import requests  # 发送请求
import random
from time import sleep  # 设置等待,防止反爬
import time
import pandas as pd  # 保存csv
import datetime
import os

定义一个请求头:

# 请求头
h1 = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
}

由于我并不知道一共有多少页,往下翻多少次,所以采用while循环,直到触发终止条件,循环才结束。

那么怎么定义终止条件呢?我注意到,在返回数据里有一个叫做"has_more"的参数,大胆猜测它的含义,是否有更多数据,正常情况它的值是true。如果它的值是false,代表没有更多数据了,即到达最后一页了,也就该终止循环了。

因此,核心代码结构应该是这样(以下是伪代码,主要是表达逻辑,请勿直接copy):

while True:
	# 发送请求
	r = requests.get(url, headers=h1)
	# 解析数据
	json_data = r.json()
	# 逐条解析
	for i in json_data['data']['notes']:
		# 笔记标题
		title = i['title']
		title_list.append(title)
	# 保存数据到csv
	。。。
	# 判断终止条件
	next_cursor = json_data['data']['cursor']
	if not json_data['data']['has_more']:
		print('没有下一页了,终止循环!')
		break
	page += 1

另外,还有一个关键问题,如何进行翻页。
查看请求参数,如下:
请求数据中的cursor

这里的游标,就是向下翻页的依据,因为每次请求的返回数据中,也有一个cursor:
返回数据中的cursor

大胆猜测,返回数据中的cursor,就是给下一页请求用的cursor,所以,这部分的逻辑实现应该如下(以下是伪代码,主要是表达逻辑,请勿直接copy):

while True:
	# 判断是否首页
	if page == 1:
		url = 'https://www.xiaohongshu.com/web_api/sns/v3/page/notes?page_size=6&sort=hot&page_id={}&sid='.format(
			page_id)
	else:
		url = 'https://www.xiaohongshu.com/web_api/sns/v3/page/notes?page_size=6&sort=hot&page_id={}&sid=&cursor={}'.format(
			page_id, next_cursor)
	# 发送请求
	r = requests.get(url, headers=h1)
	# 解析数据
	json_data = r.json()
	# 得到下一页的游标
	next_cursor = json_data['data']['cursor']

最后,是顺理成章的保存csv数据:

# 保存数据到DF
df = pd.DataFrame(
	{
		'页码': page,
		'笔记标题': title_list,
		'笔记id': note_id_list,
		'作者昵称': author_name_list,
		'作者id': author_id_list,
		'发布时间': create_time_list,
	}
)
# 保存到csv
df.to_csv(result_file, mode='a+', header=header, index=False, encoding='utf_8_sig')

至此,爬虫代码开发完毕。

完整代码中,还包含转换时间戳、随机等待时长、解析关键字段、保存Dataframe数据等逻辑实现,详见文末。

三、演示视频

代码演示:【Python爬虫演示】爬取小红书话题笔记,以#杭州亚运会#为例

四、获取完整代码

爱学习的小伙伴,本次分析过程的完整python源码及结果数据,我已打包好,并上传至我的微信公众号"老男孩的平凡之路",后台回复"爬小红书话题"即可获取。点击直达


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

标签:为例,python,爬虫,page,cursor,小红书,json,data,id
From: https://www.cnblogs.com/mashukui/p/17745533.html

相关文章

  • 以视频监控系统 EasyCVR 为例带您详解数字视频监控
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 《流畅的Python》 读书笔记 231007(第二章第一部分)
    第2章数据结构ABC语言是Python的爸爸~很多点子在现在看来都很有Python风格:序列的泛型操作、内置的元组和映射类型、用缩进来架构的源码、无需变量声明的强类型不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素,抑或是数据库查询结果,它们都共用一套丰富的操作:迭......
  • 以视频汇聚平台EasyNVR为例讲述视频监控系统可提供的几个人脸识别门禁系统
    EasyNVR是一种可支持设备通过RTSP/Onvif流媒体协议接入的视频处理系统。该系统能够对接入的视频流进行处理,并以多种格式进行多端分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS和WebRTC等多种格式。在智慧安防等视频监控场景中,EasyNVR可提供视频实时监控直播、云端录像、云存储、录像......
  • 笨办法学Python3 习题25 更多更多的训练
    练习内容:将ex25模块导入在终端中手动运行函数查看变化结果退出quit()1defbreak_words(stuff):2"用来分割参数元素"3words=stuff.split('')4returnwords56defsort_words(words):7"用来将参数元素升序排列"8returnsorted......
  • python进程之间共享数据
    python进程之间共享数据Value#Value是multiprocessing库提供的对象类​#示例:frommultiprocessingimportProcess,Value​​deftask(num:Value):  #提供锁解决同步问题  withnum.get_lock():    num.value+=1    print(f'process_num={num......
  • Python 元组完全指南1
    元组用于在单个变量中存储多个项目。mytuple=("apple","banana","cherry")元组是Python中的4种内置数据类型之一,用于存储数据集合,另外还有列表、集合和字典,它们都具有不同的特性和用途。元组是有序且不可更改的集合。元组使用圆括号表示。示例,创建一个元组:thistuple=......
  • 以视频监控系统EasyCVR为例介绍安防视频监控系统的含义和特点
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 以视频监控平台EasyCVR为例见证视频监控系统的发展历程
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 笨办法学Python3 习题24 更多的练习
    根据书中的PowerShell运行结果,进行仿写 beans,jars,crates=secret_formula(start_point)#函数运算结果存储方式一print(f"We'dhave{beans}beans,{jars}jars,and{crates}crates.") formula=secret_formula(start_point)        #两种函数运......
  • python单例模式
    Python单例模式的好处主要有以下几点:节省资源:单例模式可以确保一个类只有一个实例,这样可以避免在多个地方创建相同的对象,从而节省内存和计算资源。保证数据一致性:在多线程环境下,单例模式可以确保全局变量只被初始化一次,避免了多线程同时修改数据导致的数据不一致问题。方......