小破站w_rid获取 ,逆向算法

免责声明:本教程仅供学习和研究爬虫技术使用,严禁将所学知识用于违法、侵害他人隐私或利益的行为。任何使用本教程所提供信息造成的法律责任由读者自行承担,作者不承担任何法律责任。请在遵守相关法律法规的前提下,谨慎使用爬虫技术,遵守网站的使用规定。如有疑问或争议,请及时与网站管理员联系解决,作者不承担任何责任。感谢您阅读本教程,并希望能通过学习爬虫技术带来更多的收获和成就感。

背景

最近有朋友找到作者,在b站想找一些关于符合某种条件的博主联系,进而有一些合作,但是通过一个一个人工去寻找并筛查实在太麻烦,于是开始分析!

开始分析

打开F12点击查询
查询请求参数
多次请求发现,w_ridwts是一直在变化
全局开搜定位到 w_rid位置下断点
组装w_rid
经分析wts就是当前系统的时间戳,w_rid如图就是请求所有url参数通过排序拼接后加上一个通过固定算法生成的32位字符,值为固定ea1db124af3c7062474693fa704f4ff8

代码还原算法

python模拟算法,结构与预期一致
组装w_rid算法

w_rid , python实现如下

import hashlib

params = {
    "category_id": '',
    "search_type": "bili_user",
    "ad_resource": 5646,
    "__refresh__": 'true',
    "_extra": "",
    "context": "",
    "page": 1,
    "page_size": 36,
    "order": "",
    "duration": "",
    "from_source": "",
    "from_spmid": "333.337",
    "platform": "pc",
    "highlight": 1,
    "single_column": 0,
    "keyword": "1",
    "qv_id": "cookie获取qv_id",
    "source_tag": 3,
    "gaia_vtoken": "",
    "order_sort": 0,
    "user_type": 0,
    "dynamic_offset": 0,
    "web_location": 1430654,
    "wts": 1717500185, #当前时间
}


def calculate_md5(string):
    md5_hash = hashlib.md5()
    md5_hash.update(string.encode('utf-8'))
    return md5_hash.hexdigest()

query_string = '&'.join([f"{key}={params[key]}" for key in sorted(params.keys())])

print(query_string)
wrid = calculate_md5(query_string + 'ea1db124af3c7062474693fa704f4ff8')
print(wrid)

不想调试的小伙伴我封装了一个通用请求方法,自动填充参数,关注点赞评论学习找我获取哈

通用请求

总结

关于逆向就到这里结束了,后续会发布 红薯、某乎等平台算法。也会分享一写应用场景,比如私信通知,信息导出excel等,创作不易,麻烦点赞关注支持一下。

ps: 引用请注明来源

### B视频 `w_rid` 参数逆向工程方法 #### 确认目标接口 为了对B视频的`w_rid`参数进行逆向工程,首先要确认涉及该参数的具体API接口。通常这类操作会涉及到视频播放页面加载时请求的数据流。通过浏览器开发者工具中的网络监视功能可以定位到这些请求及其对应的响应数据[^1]。 #### 定位 JavaScript 文件 一旦找到了含有`w_rid`字段的相关HTTP请求之后,则需要进一步追踪这个值是从哪个JavaScript文件产生的。这一步骤可以通过审查网页源码并查找所有引入的外部脚本链接来完成;也可以利用Chrome DevTools等调试工具设置断点,在变量被赋值处暂停程序执行以便精确定位生成逻辑所在位置。 #### 分析代码流程 当明确了负责创建或修改`w_rid`值得那段JS代码后,就需要深入研究这段代码的工作原理了。这里可能遇到加密算法、混淆处理等情况。此时可借助诸如Beautifier之类的在线服务去除代码混淆,并尝试理解其内部结构与运算规则。如果存在复杂的编码转换,则还需要查阅相应的文档资料辅助解析[^2]。 #### 实现本地模拟 最后,在掌握了完整的计算方式基础上就可以考虑如何将其移植到自己的环境中去重现同样的效果。编写Python或其他编程语言版本的小型测试程序可以帮助验证所得到结论是否正确无误。需要注意的是某些情况下服务器端可能会对接收到的内容做额外校验(如时间戳),因此也要确保能够满足这些附加条件[^3]。 ```python import requests from bs4 import BeautifulSoup def get_wrid(video_url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url=video_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 假设 w_rid 是在某个特定标签内找到的 wr_id_element = soup.find('input', {'name': '_wr_id'}) if wr_id_element is not None: return wr_id_element['value'] else: raise ValueError("Could not find the _wr_id element") if __name__ == "__main__": video_page_link = input("Enter the URL of a bilibili video page:") try: print(f"The value of w_rid for this video is {get_wrid(video_page_link)}") except Exception as e: print(e) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值