甘桔 发表于 2023-10-7 09:39:17

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

目录

[*]一、爬取目标
[*]二、爬虫代码讲解

[*]2.1 分析过程
[*]2.2 爬虫代码

[*]三、演示视频
[*]四、获取完整代码

一、爬取目标

您好!我是@马哥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,所以,这部分的逻辑实现应该如下(以下是伪代码,主要是表达逻辑,请勿直接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干货中!

来源:https://www.cnblogs.com/mashukui/p/17745533.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【爬虫实战】用python爬小红书某话题的笔记,以#杭州亚运会#为例