本项目旨在通过深入研究小红书平台所采用的数据保护及反爬虫机制,学习并理解其中涉及的安全风控技术和逆向工程技术原理。 我们将分析这些机制如何有效防止非授权访问与数据抓取,从而更好地认识到构建安全网络环境的重要性。 在此基础上,我们希望探讨如何合法合规地开发出更高效的数据收集解决方案,促进互联网行业的健康发展。 整个过程中,我们将严格遵守相关法律法规,尊重所有平台的服务条款,确保研究活动符合道德标准。
注意: 本项目中的代码是基于对公开可访问的JavaScript代码进行分析和独立实现的,不包含任何受版权保护的原创代码或商业秘密。
侵权移除通知机制: 若本项目的任何代码或内容被第三方权利人认为侵犯了其合法权益(包括但不限于著作权、数据权益等),请权利人务必通过以下方式联系作者,提供详细的侵权证明:
-
联系邮箱: [email protected] · (不接该项目相关单子,请不要联系我)
-
通知要求: 请提供详细的侵权内容链接、权利证明文件及移除要求。
作者承诺,在收到合格的侵权通知并核实后,将立即对涉嫌侵权的代码部分进行移除或修改。
-
逆向所有参数
-
Cookies:
a1webIdacw_tcweb_session(游客生成)sec_poison_idwebsectigagid
-
headers:
x-b3-traceidx-sx-s-commonx-tx-xray-traceid
-
-
采用
aiohttp封装异步session -
封装大部分常用接口,简单使用
xhs_session.apis.note.like_note(note_id)即可调用 -
预留 app 操作位置, 例如 扫码登录 / 124安全扫码 等 只需要根据注释掉的代码补全你自己的app协议即可。
请仔细阅读并理解以下条款:
- 目的限定: 本项目代码仅供个人学习、技术研究和交流使用。
- 严禁滥用: 严禁将本项目用于任何商业用途、非法用途、恶意用途,或对任何第三方网站进行攻击、破坏其正常服务或获取未经授权的数据。
- 用户责任: 任何组织或个人因使用、分发或以其他方式利用本项目所造成的一切后果(包括但不限于法律诉讼、经济损失、数据泄露等),均由使用者自行承担。项目作者不承担任何连带责任。
- 无担保: 本项目不提供任何形式的担保,包括但不限于适销性、特定用途适用性或非侵权性。
- 代码来源: 本项目中所有逻辑和算法均为作者在理解公开机制后独立编写,未复制或包含任何目标网站的原始、受保护的代码片段。
一旦您克隆或下载本项目,即视为您已同意并接受上述所有条款。
本项目采用MIT许可证。
# 导入工厂方法
from request.web.xhs_session import create_xhs_session
# 配置代理(必须)
proxy = "http://127.0.0.1:7890"
# 方式1: 游客创建
xhs_session = await create_xhs_session(proxy=proxy)
# 方式2: 已有账号登录
xhs_session = await create_xhs_session(proxy=proxy, web_session="030037afxxxxxxxxxxxxxxxxxxxaeb59d5b4")
# 方式3: app sid 自动扫码登录 (需自行补充app协议, 位置在 request/web/apis/auth.py 48行 与 101行 附近)
xhs_session = await create_xhs_session(proxy=proxy, sid="179999999999999999999")res = await xhs_session.apis.auth.get_self_simple_info()
logger.success("个人信息 | " + (await res.text()))
# 打印所有cookie
for a,b in xhs_session.cookies.items():
logger.success(f'"{a}": "{b}", ')
res = await xhs_session.apis.note.note_detail("68add7d50xxxxxxxxxx37569", "ABFezCZFDcUHv-xxxxxxxxxxxHn4p5zH8=")
logger.success("笔记详情 | " + (await res.text()))
res = await xhs_session.apis.comments.get_comments("68add7d50xxxxxxxxxx37569", "ABFezCZFDcUHv-xxxxxxxxxxxHn4p5zH8=")
logger.success("笔记评论列表 | " + (await res.text()))
res = await xhs_session.apis.note.search_notes("口红")
logger.success("搜索笔记 | " + (await res.text()))
res = await xhs_session.apis.user.follow_user("5f86feee000000000101e3cb")
logger.success("关注 | " + (await res.text()))# 要记得关
await xhs_session.close_session()-
在
request/web/apis目录下选择所需接口类目对应添加即可, 增加模板如下:# comments.py # post请求demo async def demo_post(self, test_demo: str) -> aiohttp.ClientResponse: url = "https://edith.xiaohongshu.com/api/test_demo" data = { 'test_demo': test_demo } return await self.session.request(method="post", url=url, data=data) # get请求demo async def demo_get(self, test_demo: str) -> aiohttp.ClientResponse: url = "https://edith.xiaohongshu.com/api/test_demo" params = { 'test_demo': test_demo } return await self.session.request(method="get", url=url, params=params)
然后就可以使用了
res = await xhs_session.apis.comments.demo_post("test_demo") logger.success("demo_post | " + (await res.text())) res = await xhs_session.apis.comments.demo_get("test_demo") logger.success("demo_get | " + (await res.text()))
-
如果需要增加类目文件,则需要在
__init__.py中 更改如下代码:# __init__.py class APIModule: def __init__(self, __session): self.auth = Authentication(__session) self.comments = Comments(__session) self.note = Note(__session) self.user = User(__session) # 新增 self.new = New(__session)
同时新建new.py文件,并增加如下内容:
# new.py import aiohttp from typing import TYPE_CHECKING if TYPE_CHECKING: from request.web.xhs_session import XHS_Session # 仅类型检查时导入 class New: def __init__(self, session: "XHS_Session"): self.session = session # 保存会话引用 # TODO STH...
-
配置文件在
request/web/encrypt/web_encrypt_config.ini-
小版本号修改配置文件中内含完整说明
-
加密配置有能力自行修改
-

