| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- """用页面cookie调评论API获取每篇笔记的评论"""
- import json, time, websocket, urllib.request
- tabs = json.loads(urllib.request.urlopen("http://127.0.0.1:9222/json").read())
- ws_url = None
- for t in tabs:
- if "creator.xiaohongshu.com" in t.get("url", ""):
- ws_url = t["webSocketDebuggerUrl"]
- break
- ws = websocket.create_connection(ws_url, timeout=30)
- msg_id = 0
- def send_cmd(method, params=None):
- global msg_id
- msg_id += 1
- ws.send(json.dumps({"id": msg_id, "method": method, "params": params or {}}))
- while True:
- resp = json.loads(ws.recv())
- if resp.get("id") == msg_id:
- return resp.get("result", {})
- send_cmd("Page.navigate", {"url": "https://creator.xiaohongshu.com/new/note-manager"})
- time.sleep(5)
- # 拦截评论API
- send_cmd("Network.enable")
- # 导航到坦白局笔记详情(触发评论API加载)
- # 先尝试直接调评论API
- note_ids = [
- ("坦白局", "6a82ca500000000025004062"),
- ("D27教育博主", "6a81a53d000000000600738e"),
- ]
- all_comments = {}
- for name, nid in note_ids:
- js = f"""
- (async function() {{
- try {{
- // 尝试多种评论API端点
- var urls = [
- '/api/galaxy/creator/note/comment?noteId={nid}&cursor=&num=20',
- '/api/galaxy/v2/creator/note/comment?noteId={nid}&cursor=&num=20',
- '/api/galaxy/creator/comment/list?noteId={nid}&cursor=&num=20',
- '/api/galaxy/creator/note/comments?noteId={nid}&cursor=&num=20'
- ];
- var results = [];
- for (var i = 0; i < urls.length; i++) {{
- try {{
- var r = await fetch(urls[i], {{credentials: 'include'}});
- var text = await r.text();
- if (text.indexOf('"success":true') >= 0 || text.indexOf('"code":0') >= 0) {{
- results.push({{url: urls[i], data: text.substring(0, 5000)}});
- }}
- }} catch(e) {{}}
- }}
- if (results.length === 0) {{
- // 也试试edith域名
- var edith_urls = [
- 'https://edith.xiaohongshu.com/api/sns/web/comment/page?note_id={nid}&cursor=&top_comment_id=&image_formats=jpg,webp,avif&xsec_token=YBieUL8uRjxi1dmXwcv1fHXDs3jL1VSMg8urb7O07P_uc='
- ];
- for (var j = 0; j < edith_urls.length; j++) {{
- try {{
- var r2 = await fetch(edith_urls[j], {{credentials: 'include'}});
- var t2 = await r2.text();
- results.push({{url: edith_urls[j], data: t2.substring(0, 5000)}});
- }} catch(e) {{}}
- }}
- }}
- return JSON.stringify(results);
- }} catch(e) {{ return 'ERR:' + e.message; }}
- }})()
- """
- ws.send(json.dumps({"id": 300 + note_ids.index((name, nid)), "method": "Runtime.evaluate", "params": {"expression": js, "returnByValue": True, "awaitPromise": True}}))
-
- for i in range(len(note_ids)):
- for _ in range(30):
- resp = json.loads(ws.recv())
- rid = resp.get("id", 0)
- if rid >= 300 and rid < 300 + len(note_ids):
- val = resp.get("result", {}).get("result", {}).get("value", "")
- name = note_ids[rid - 300][0]
- with open(rf"C:\code\cfc\运营文案\小红书发布\_process_scripts\comments_{name}.txt", "w", encoding="utf-8") as f:
- f.write(val)
- print(f"Saved comments for {name}")
- break
- ws.close()
|