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

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

一、先看效果

程序输入:在一个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 pagepage = 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].linkauthor_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、循环爬取所有笔记链接

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

7、保存缓存内的数据到本地 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')

四、录屏

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

Python爬虫实战:获取小红书,采集笔记详情数据

视频地址 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个urlnote_urls_file_path = '需要采集的笔记链接(每行放1个链接).txt'# 从txt文件读取urlsnote_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”公众号,欢迎关注与我一起交流学习。还可以通过公众号添加我的私人微信。

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

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

相关文章

Mybatis执行过程

1、加载配置文件 InputStream is Resources.getResourceAsStream("mybatis-config.xml"); 2、获得session对象,接受结果 SqlSessionfactoryBuilder builder new SqlSessionfactoryBuilder(); SqlSessionFactory factory builder .build(is); SqlSessio…

docker-compose 搭建laravel环境

laravel环境包含nginx,mysql,php7.4,redis 一、安装好docker后pull镜像 1.nginx镜像 docker pull nginx:latest单独启动容器 docker run --name nginx -p 80:80 -d nginx 2.php镜像 docker pull php:7.4-fpm3.mysql镜像 docker pull mysql:5.74.redis镜像 docker pull r…

zabbix3.4.6 源码安装

Step1: 下载 https://www.zabbix.com/download 选中一下。download Zabbix Sources PackageReleaseDateRelease NotesZabbix ManualDownloadZabbix 3.4Server, Proxy, Agent, GUI3.4.615 January, 2018 Download step2 :拷贝在redhat 6.3_X86_86(192…

UE蓝图 序列(Sequence)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 UE蓝图 函数调用(CallFunction)…

Vue3中的事件监听与处理机制深度解析

随着Vue3的发布,其在性能、灵活性和易用性上都实现了显著提升。其中,事件监听和处理机制作为Vue框架中的重要组成部分,也进行了相应的优化与升级。本文将深入探讨Vue3中如何进行事件监听与处理。 一、Vue3事件绑定 在Vue3中,我们…

springboot215基于springboot技术的美食烹饪互动平台的设计与实现

美食烹饪互动平台的设计与实现 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统美食信息管理难度大&…

MAC地址学习和老化

MAC地址学习过程 一般情况下,MAC地址表是设备根据收到的数据帧里的源MAC地址自动学习而建立的。 图1 MAC地址学习示意图 如图1,HostA向SwitchA发送数据时,SwitchA从数据帧中解析出源MAC地址(即HostA的MAC地址)和VLAN…

做接口测试的流程一般是怎么样的?UI功能6大流程、接口测试8大流程这些你真的全会了吗?

在讲接口流程测试之前,首先需要给大家申明下:接口测试对于测试人员而言,非常非常重要,懂功能测试接口测试,就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试,一般也是面试笔试必问。为方便大家更…

C++ //练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。

C Primer(第5版) 练习 8.13 练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /***************************************…

Unity(第四部)新手组件

暴力解释就是官方给你的功能;作用的对象上面如: 创建一个球体,给这个球体加上重力 所有物体都是一个空物体,加上一些组件才形成了所需要的GameObject。 这是一个空物体,在Scene场景中没有任何外在表现,因为…

tinyxml2开源库使用

源码下载:GitHub - leethomason/tinyxml2: TinyXML2 is a simple, small, efficient, C XML parser that can be easily integrated into other programs. 1.加载tinyxml2库 解压上面现在的压缩包,将tinyxml2.h/tinyxml2.cpp添加到项目工程当中&#x…

javascript中的垃圾回收机制

一、什么是JavaScript垃圾回收机制 JavaScript中的垃圾回收机制是自动管理内存的一种机制。它负责在程序运行时识别和清除不再使用的内存,以便释放资源并提高性能。 JavaScript中的垃圾回收器会定期扫描内存中的对象,标记那些可达对象和不可达对象。 可达…

公厕智慧化_智慧化的公厕

公厕智慧化是现代城市建设中的重要一环。通过信息化、数字化和智慧化技术手段,实现对公共厕所的高效管理和服务,不仅提升了城市环境质量,还改善了居民生活品质。智慧公厕的智慧化包括监测、管理、服务和设备的智慧化,利用先进科技…

unity-unity2d基础操作笔记(二)0.5.0

unity2d基础操作笔记 五十一、canvas中的必须熟悉的属性五十二、如何调整canvas与游戏人物大小近似大小五十三、canvas中的canvas scaler介绍【概念】五十四、ui scale mode介绍【概念】五十五、为什么创建image后,canvas的范围要要远远大于游戏世界?五十六、图片常用操作【技…

1分钟带你学会Python的pass关键字和range函数

1.pass 关键字 pass关键字在 python 中没有任何实际意义,主要是用来完成占位的操作,保证语句的完整性 age int(input(请输入您的年龄:))if age > 18: pass # pass 在此处没有任何意义,只是占位 print(欢迎光临。。。…

美易官方:巴菲特发布2024年致股东公开信,重磅!

近日,全球投资界的巨擘巴菲特发布了2024年致股东的公开信,引起了广泛关注。作为伯克希尔哈撒韦公司的董事长和首席执行官,巴菲特的信函一直备受投资者们的期待。在这封公开信中,巴菲特分享了关于投资、公司治理和全球经济等方面的…

常见的排序算法整理

1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻的元素进行比…

Spring 中 ApplicationContext 和 BeanFactory 的区别有哪些

先看一张类图: 区别: 1:包目录不同: spring-beans.jar 中 org.springframework.beans.factory.BeanFactory spring-context.jar 中 org.springframework.context.ApplicationContext 2:国际化: BeanFacto…

数组详解-格式定义-遍历-求最值-遍历求和-打乱数组中的数据

数组指的是一种容器,可以用来存储同种数据类型的多个值 定义数组格式 : 完整格式-静态初始化 数据类型[]数组名new 数据类型[]{元素1,元素2,元素3...} int[] array new int[]{11,22,33}; 简化格式 int[] array {11,22,33}; 完整格式-动态初始化 初始化时只指定数组长…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解(linux系统和windows系统) MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…