当前位置: 首页 > news >正文

小红书关键词爬虫

标题

  • 1 统计要收集的关键词,制作一个文件夹
  • 2 爬取每一页的内容
  • 3 爬取标题和内容
  • 4 如果内容可以被查看,爬取评论内容
  • 5 将结果进行汇总,并且每个帖子保存为一个json文件,具体内容
  • 6 总结

1 统计要收集的关键词,制作一个文件夹

例如,我要收集旅游相关的,就收集:
旅游、旅行、旅游攻略,这些词,做成一个txt文件。

用一个浏览器登录上小红书账号,然后记录写cookies,例如:
在这里插入图片描述

2 爬取每一页的内容

主要使用request,js模块,将爬取的内容保存为res,里面包含一页20条数据。

info = re.sub(r'"page":".*?"', f'"page":"{page}"', info)ret = js.call('get_xs', api, info, cookies["a1"])headers['x-s'], headers['x-t'] = ret['X-s'], str(ret['X-t'])response = requests.post(search_url, headers=headers, cookies=cookies, data=info.encode('utf-8'))res = response.json()

3 爬取标题和内容

从每一个note里面解析出标题,内容等信息。

result = {}result["title"] = data['note_card']['title']result["desc"] = data['note_card']['desc'].replace("\n", "").replace("\t", "")tags_temp = data['note_card']['tag_list']tags = []for tag in tags_temp:try:tags.append(tag['name'])except:passresult["tags"] = tagsresult["time"] = timestamp_to_str(data['note_card']['time'])

4 如果内容可以被查看,爬取评论内容

每个帖子里面的评论的单独的url,需要根据id号进行拼接,所以根据第3节获取的user-id,进行拼接,然后再用get进行访问,最后获得每条评论,注意有些帖子是不能被查看的,所以需要进行判断。

note_id = url.split('/')[-1]comments_url = "https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id={}&image_scenes=FD_WM_WEBP,CRD_WM_WEBP".format(note_id)response = requests.get(comments_url, headers=headers, cookies=cookies)res = response.json()comments = []for line in res["data"]["comments"]:comment_str = line["content"]comments.append(comment_str)

5 将结果进行汇总,并且每个帖子保存为一个json文件,具体内容

包含:标题,具体内容,标题,创建时间,评论内容。每个关键词一个文件夹。
在这里插入图片描述

6 总结

详细代码私聊,注意本内容没有爬取图片,如果需要可以添加。

相关文章:

  • 光学3D表面轮廓仪微纳米三维形貌一键测量
  • 命令模式(Command Pattern)
  • 在此处打开命令窗口 (Open command window here)
  • 2023年12月CCF-GESP编程能力等级认证Scratch图形化编程三级真题解析
  • Tomcat 架构
  • ComfyUI中的翻译节点(Deep Translator Text Node)怎么用
  • openGauss学习笔记-232 openGauss性能调优-系统调优-资源负载管理-资源管理准备-资源规划
  • 掘根宝典之C语言字符串输出函数(puts(),fputs())
  • 数据迁移DTS | 云上MySQL 数据库迁移至达梦数据库
  • JavaScript-关于事件、事件流(捕获、冒泡)、事件源、常用事件
  • 总结springboot启动jar,指定配置文件
  • PCB Layout完成后,检查注意事项
  • 单点故障解决方案之Smart Link与Monitor Link
  • <网络安全>《62 微课堂<第2课 流量限制是什么?>》
  • MATLAB知识点:利用智能缩进整理代码
  • #Java异常处理
  • [译]前端离线指南(上)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【comparator, comparable】小总结
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android优雅地处理按钮重复点击
  • C学习-枚举(九)
  • github从入门到放弃(1)
  • Java精华积累:初学者都应该搞懂的问题
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel Telescope:优雅的应用调试工具
  • React+TypeScript入门
  • Vim 折腾记
  • windows下使用nginx调试简介
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 将回调地狱按在地上摩擦的Promise
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • hi-nginx-1.3.4编译安装
  • ​queue --- 一个同步的队列类​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #《AI中文版》V3 第 1 章 概述
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (3)选择元素——(17)练习(Exercises)
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (一)u-boot-nand.bin的下载
  • **PHP二维数组遍历时同时赋值
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET 8.0 发布到 IIS
  • .net Signalr 使用笔记
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net6使用WebSocket与前端进行通信
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET应用架构设计:原则、模式与实践 目录预览
  • ?
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件