小红书网页版入口锁骨发 3(小红书网页版入口u)

案例介绍:

链接:https://www.xiaohongshu.com/discovery/item/62b46c380000000021037a12

今天学习抓取某红书web版的社区精选的文章内容,我们选择其中的一篇,然后用谷歌开发者工具查看我们可以得知页面数据来自于:

请求地址:https://www.xiaohongshu.com/discovery/item/62b46c380000000021037a12
请求方法: GET

在请求这个链接的时候,需要带上cookies值才能拿到正确的数据,cookies所携带的4个参数:

  1. xhsTrackerId
  2. extra_exp_ids
  3. timestamp2
  4. timestamp2.sig

(其实只需要timestamp2和timestamp2.sig即可,本着学习的目的,尝试破解每个一个参数)

案例解析:

下面我们就一一来分析下这几个参数是如何生成的。

通过观察请求过程可以看到,对于这个请求至少请求了三次,才最终得到页面内容。

小红书网页版入口锁骨发 3(小红书网页版入口u)

第一次请求的Response Headers中可以看到进行了cookie值的设置,而且正是我们要破解的1,2两个参数:

url_base = 'https://www.xiaohongshu.com/discovery/item/62b46c380000000021037a12'
referer = 'https://www.xiaohongshu.com/web-login/canvas?redirectPath=http://www.xiaohongshu.com/discovery/item/62b46c380000000021037a12'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
headers = {
    'referer': referer,
    'user-agent': user_agent
}
resp = requests.get(url=url_base, headers=headers, allow_redirects=False)
for cookie in resp.cookies:
    print(cookie.name + "\t" + cookie.value)

C:\ProgramData\Miniconda3\python.exe /102小红书/xhs_detail.py

extra_exp_ids wx_launch_open_app_decrement_clt,wx_launch_open_app_duration_origin,recommend_comment_hide_clt1,recommend_comment_hide_v2_exp1,recommend_comment_hide_v3_exp,supervision_exp,supervision_v2_exp,commentshow_exp1,gif_exp1,ques_exp1

xhsTrackerId 16b87e90-0bb9-44e8-c4e5-0e7f5be5042a

搞定!这里有个知识点需要注意,在访问页面的时候,有些网站为了反爬,设置了302重定向问题,如果我们通过request库的get只能访问到200的页面,而302的页面无法访问到,这样的结果就是无法拿到set的cookie值。那么这是,只需要在get方法内设置allow_redirects为False就可以了。

下面我们继续破解剩下的参数,通过跟踪请求发现另外两个参数是在registerCanvas方法调用的时候生成的。

小红书网页版入口锁骨发 3(小红书网页版入口u)

请求地址:https://www.xiaohongshu.com/fe_api/burdock/v2/shield/registerCanvas?p=cc

请求方法:POST

cooke携带的参数就是刚刚我们解析出来的那两个,但payload中还有两个参数id,sign是未知参数,啥时候生成的呢?我们在XHR为registerCanvas方法加断点,通过反复调试,细心观察得出这两个值是在下面这个方法生成:

HCUnF: function(n, t) {
   return n(t)
},

继续跟进去这个方法:

...
var u = I.qrTqB(l, I.PNXDL, JSON[r(1347)](i))
 , c = I[r(570)](v, I[r(791)](u, I[r(222)]));
...

因为在调用栈的下一个栈中这两个参数对应的参数名就是u和c,所以很容易就找到了这两个参数。经过研究分析,u和c的值取决于i的值,而i代表的是浏览器指纹,我们可以假定i的值确定,那么u和c的值也是一定的,所以最终id和sign可以确定为是两个常量:

data = {
    'id':'5995b84d64e89165d65a5fcda6a92243',
    'sign': '713c02f1ffc1412d6a76c53e3a...'
}
#cookies由上一步生成
headers = {
    'cookie':cookies,
    'user-agent': user_agent
}
url = 'https://www.xiaohongshu.com/fe_api/burdock/v2/shield/registerCanvas?p=cc'
resp = session_.post(url=url, headers=headers, data=data, allow_redirects=False)

for cookie in resp.cookies:
    print(cookie.name + "\t" + cookie.value)

C:\ProgramData\Miniconda3\python.exe /102小红书/xhs_detail.py

timestamp2 1656404025531fefca74f13f90727ed11265d91e0bcecbcb55b2bb7511ccd19

timestamp2.sig gsvlCIEkAZ7BXi87IIRaD1NCXp4zJcEgw5iOaFC3uBw

搞定!4个参数都解析出来了,那样我们就可以抓取到文字内容了~

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.ixoh.com/13789.html