首页 > 编程语言 >Python实战:爬取小红书-采集笔记详情

Python实战:爬取小红书-采集笔记详情

时间:2024-03-22 14:29:05浏览次数:32  
标签:info author Python 取小红书 笔记 note 小红书 详情 page

上一篇文章发出后,有读者问能不能爬到小红书笔记详情数据,今天他来了。

一、先看效果

程序输入:在一个txt文件内粘贴要爬取的笔记链接,每行放1个链接。

程序输出:输出是一个所有笔记详情数据的excel表格,包含”采集日期、作者、笔记标题、发布日期、IP属地、点赞数、收藏数、评论数、笔记链接、作者链接、标签、笔记内容“这些字段,和网页端看到的数据一样。

保存的 excel 表如下:

采集到的全部标签如下:

采集到的全部笔记内容如下:

二、分析思路

由于小红书反爬机制很严格,很难批量获取小红书的大量数据。用爬虫去爬小红书数据,还有被小红书封号的风险。

但是我这个方法是纯模拟人的操作,以人的操作习惯去查看笔记和提取数据,不会触发小红书的反爬机制。

分析爬虫思路,概括如下:

1、登录小红书

2、从 txt 文件中读取所有笔记链接

3、逐条根据笔记链接打开小红书笔记详情页

4、提取笔记页面数据

5、处理获取到的数据,写入缓存

6、循环爬取所有笔记链接

7、保存缓存内的数据到本地 excel 文件

三、开始写代码

1、登录

使用 DrissionPage 库,打开小红书主页https://www.xiaohongshu.com,设置 20 秒延时,这时可以使用手机扫码登录账号。

from DrissionPage import ChromiumPage
def sign_in():
    sign_in_page = ChromiumPage()
    sign_in_page.get('https://www.xiaohongshu.com')
    print("请扫码登录")
    # 第一次运行需要扫码登录
    time.sleep(20)

只有第 1 次运行代码需要登录,浏览器会保存登录状态信息。第 2 次之后再运行代码,就免登录了,可以把 sign_in()步骤注释掉。

运行过我上一篇文章的代码,浏览器已经保存登录状态了,也可以直接注释掉登录步骤。

2、从txt文件中读取所有笔记链接

定义一个read_urls_from_txt(path)函数,函数的参数是 txt 文件路径,执行函数返回一个列表,包含所有 urls。

def read_urls_from_txt(path):
    with open(path, 'r') as file:
        urls = [line.strip() for line in file.readlines()]
    return urls

3、打开小红书笔记详情页

打开每个 url 的网页,可以看到浏览器已经加载出来笔记的信息了。

def open_url(url):
    global page
    page = ChromiumPage()
    # page.set.load_mode.eager()
    page.get(f'{url}')

4、提取页面数据

使用 DrissionPage 库定位元素方法,定位到包含笔记详情的 作者、标题、点赞 等信息。

例如,定义一个get_author_info(page)函数,提取作者信息,函数返回author_info字典,包含作者名字和作者主页链接。

def get_author_info(page):
    # 定位作者信息
    div_author = page.ele('.author-container', timeout=0)
    div_info = div_author.ele('.info', timeout=0)
    # 作者名字
    author_name = div_info.ele('.username', timeout=0).text
    # 作者主页链接
    author_link = div_info.eles('tag:a', timeout=0)[0].link
    author_info = {'author_name': author_name, 'author_link': author_link}
    return author_info

类似的,定义get_note_content(page)函数提取笔记内容、标签、链接、发布日期、IP 属地数据,get_count(page)函数提取点赞、收藏、转发数据。

5、处理获取到的数据,写入缓存

今天使用一个新的库来保存数据——DataRecorder库,这个库也是由DrissionPage库同作者开源的。

在上一篇文章中,DrissionPage开源作者给我留言,我才发现这个库,用起来真方便。我还有缘加到了大佬的微信,太幸运了。

DataRecorder库是一个基于 python 的工具集,用于记录数据到文件。使用方便,代码简洁,是一个可靠、省心且实用的工具。

DataRecorder库目前在码云上 Star 数还不高,在这里推荐一下,非常适合配合爬虫使用。

from DataRecorder import Recorder
# 新建一个excel表格,用来保存数据
r = Recorder(path='采集输出-小红书笔记详情.xlsx', cache_size=20)
#数据写入缓存
new_note_contents_dict = {'采集日期': current_date, '作者': author_name, '笔记标题': note_title,
                          '发布日期': date, 'IP属地': location, '点赞数': like_count,
                          '收藏数': collect_count, '评论数': chat_count, '笔记链接': note_link,
                          '作者链接': author_link, '标签': tags, '笔记内容': note_desc}
r.add_data(new_note_contents_dict)

6、循环爬取所有笔记链接

使用 tqdm库 显示爬取进度条,在循环体内,循环调用 get_note_page_info(note_url) 函数采集笔记页面信息。

for note_url in tqdm(note_urls):
    get_note_page_info(note_url)

其中 get_note_page_info(url) 函数如下,实现采集作者信息、笔记内容、点赞、收藏、评论数的功能。

def get_note_page_info(url):
    # 访问url
    open_url(url)
    # 提取作者信息
    author_info = get_author_info(page)
    # 提取笔记内容
    content = get_note_content(page)
    # 提取点赞、收藏、评论数
    count = get_count(page)
    note_contents = {'note_link': url, 'author_info': author_info, 'content': content, 'count': count}

Pycharm 控制台输出如下:

7、保存缓存内的数据到本地 excel 文件

使用 DataRecorder库 将数据保存到 excel 文件,用了这个库真的很省心。

from DataRecorder import Recorder
# 新建一个excel表格,用来保存数据
r = Recorder(path='采集输出-小红书笔记详情.xlsx', cache_size=20)
#数据写入缓存
r.add_data(new_note_contents_dict)
# 获取当前日期
current_date = date.today()
# 保存excel文件
r.record(f'采集输出-小红书笔记详情-{current_date}.xlsx')

保存的 excel 文件如下:

四、录屏

以一个爬取过程为例,录屏如下:

插入视频

视频地址 https://www.bilibili.com/video/BV1hu4m1w7Qt

五、全部代码

由于代码太长,在这里只给出主函数代码,有兴趣的读者可以根据上述信息自己补全代码。

主函数代码如下:

if __name__ == '__main__':
    # 第1次运行需要登录,后面不用登录,可以注释掉
    # sign_in()

    # 新建一个excel表格,用来保存数据
    r = Recorder(path='采集输出-小红书笔记详情.xlsx', cache_size=20)

    # 获取当前日期
    current_date = date.today()

    # 设置要采集的笔记链接
    # 多篇小红书笔记的url地址放在txt文件里,每行放1个url
    note_urls_file_path = '需要采集的笔记链接(每行放1个链接).txt'

    # 从txt文件读取urls
    note_urls = read_urls_from_txt(note_urls_file_path)

    for note_url in tqdm(note_urls):
        # 采集笔记详情,返回一个note_contents字典
        note_contents = get_note_page_info(note_url)

        # 将note_contents字典转换为字符串
        # note_contents = json.dumps(note_contents, separators=(',', ':'), ensure_ascii=False)
        # print(type(note_contents), "笔记详情:", note_contents)

    # 保存excel文件
    r.record(f'采集输出-小红书笔记详情-{current_date}.xlsx')

主函数截图如下:

六、总结

小红书是商业化很成功的平台,很多创业者在研究小红书流量。

上一篇文章发出后,效果很好,我结交了一些朋友,也赚到了一些睡后收入。

有很多读者在公众号后台加我微信,既有学生,也有创业者、小红书运营,还有开源作者、腾讯的小伙伴以及出版社老师,很开心能结交一些朋友。

七、获取完整源码

小红书的数据应该很有价值,特别有兴趣的小伙伴可以在公众号后台私聊我,以一杯咖啡的小红包获取全部代码(毕竟我写代码、调试代码几个晚上~~~)。

我的这个代码,调试的很好,运行几十次还没出过问题。可以帮助你获取对标博主的创作风格,有重点的分析和学习。

福利:上一篇文章承诺前 5 名读者付费可以获取后续更新的代码,说到做到,本篇完整源码免费送给这 5 位读者。

本篇继续放出 5 个名额,前 5 名购买读者可以免费获得后续更新代码。

每一份能满足他人需求的努力都值得被付费。

部分读者交流如下:

本文首发在“程序员coding”公众号,欢迎关注与我一起交流学习。还可以通过公众号添加我的私人微信。

标签:info,author,Python,取小红书,笔记,note,小红书,详情,page
From: https://blog.csdn.net/stormhou/article/details/136918786

相关文章

  • Python和Pycharm在windows环境下的安装
    Python和Pycharm在windows环境下的安装找到python:登录官网www.python.org在主页找到Downloads选择对应电脑系统---->找到你要下载的版本下载即可找到Pycharm:登录网站https://www.jetbrains.com/pycharm/download/#section=windows---->开发人员选项---->pycharm---->选择......
  • ssm/php/node/python学生社团管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代教育体系中,学生社团活动被视为校园文化的一个重要组成部分,它不仅丰富了学生的校园生活,还提供了一个平台让学生能够在实践中学习和发展个人兴趣。......
  • ssm/php/node/python音乐节购票系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表 系统的选题背景和意义选题背景音乐节作为一种集文化、艺术与娱乐于一体的大型活动,在全球范围内享有广泛的欢迎度。随着人们生活水平的提升和对精神文化生活追求的加深,音乐节不仅仅......
  • ssm/php/node/python医疗陪诊系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代社会,随着生活节奏的加快和工作压力的增大,人们在面对健康问题时往往感到无助。尤其是当患者需要在医院接受治疗时,复杂的医疗流程、专业的医疗术语......
  • ssm/php/node/python医疗健康智能服务系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:探索医疗健康智能服务系统i32t6的应用价值在当今这个信息技术高速发展的时代,医疗健康行业正经历着翻天覆地的变革。智能化、数字化已成为该行业发展的重要趋......
  • ssm/php/node/python学习互助平台网站
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:构建学习互助平台网站8f554的必要性在信息技术高速发展的今天,网络教育已成为知识传播的重要途径。然而,个体学习者在面对海量信息时往往感到迷茫和孤立,缺乏有......
  • ssm/php/node/python养殖管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着全球人口的增长和消费模式的变化,对于动物蛋白的需求日益上升。这一趋势直接推动了养殖行业的迅速发展,从而带来了对高效、现代化管理手段的迫切需求......
  • ssm/php/node/python银行存取款管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表 系统的选题背景和意义背景:在当今社会,随着经济的飞速发展和人们生活水平的不断提高,对于资金管理的需求也日益增长。个人及企业对于资金的存取、转账、支付等操作变得频繁而复杂。传......
  • ssm/php/node/python银行财务管理系统
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表 系统的选题背景和意义选题背景:在当今的金融领域,银行作为核心机构,其财务管理系统的高效与稳定直接关系到整个金融体系的运行效率和安全性。随着科技的不断进步和金融市场的日益复杂......
  • 计算机二级(python)【一】
    真题11、考生文件夹下存在一个文件PY101.py,请写代码替换横线,不修改其他代码,实现以下功能:键盘输入正整数n,按要求把n输出到屏幕,格式要求:宽度为20个字符,减号字符-填充,右对齐,带千位分隔符。如果输入正整数超过20位,则按照真实长度输出。例如:键盘输入正整数n为1234,屏幕输出......