├── bg.png
├── 重定向IO.py
├── README.md
├── .gitignore
├── main.py
├── weibo.py
├── b站.py
├── 小红书.py
├── kuaishou.py
└── x_s.js
/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/suupermans/data-collectors/HEAD/bg.png
--------------------------------------------------------------------------------
/重定向IO.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import tkinter
3 |
4 |
5 | class myStdout(): # 重定向类
6 | def __init__(self):
7 | # 将其备份
8 | self.stdoutbak = sys.stdout
9 | self.stderrbak = sys.stderr
10 | # 重定向
11 | sys.stdout = self
12 | sys.stderr = self
13 |
14 | def write(self, info):
15 | # info信息即标准输出sys.stdout和sys.stderr接收到的输出信息
16 | t.insert('end', info) # 在多行文本控件最后一行插入print信息
17 | t.update() # 更新显示的文本,不加这句插入的信息无法显示
18 | t.see(tkinter.END) # 始终显示最后一行,不加这句,当文本溢出控件最后一行时,不会自动显示最后一行
19 |
20 | def restoreStd(self):
21 | # 恢复标准输出
22 | sys.stdout = self.stdoutbak
23 | sys.stderr = self.stderrbak
24 |
25 |
26 | def btn_func():
27 | """按键的触发事件"""
28 | #demo0929.func()
29 |
30 | mystd = myStdout() # 实例化重定向类
31 | window = tkinter.Tk() # 实例化tk对象
32 | t = tkinter.Text(window) # 创建多行文本控件
33 | t.pack() # 布局在窗体上
34 |
35 | b = tkinter.Button(window, text='start', command=btn_func) # 创建按钮控件,并绑定触发事件
36 | b.pack() # 布局在窗体上
37 |
38 | window.mainloop() # 显示窗体
39 | mystd.restoreStd() # 恢复标准输出
40 |
41 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # data-collectors
2 | 基于python开发的可以采集b站,微博,快手,小红书评论的GUI软件
3 |
使用教程
4 | 1.首先运行main.py,将图形界面窗口运行出。
5 |
6 |
7 |
8 | 2.再次在图形界面窗口中点击需要爬取的类型网站。
9 |
10 | 3.具体操作指南。
11 |
12 | ## b站程序使用教程
13 |
14 | 1. 找到视频网址(点击b站上面你想要看的任何一个视频)
15 |
16 |
17 |
18 | 2. F12键打开开发者工具,找到红色标识的一栏
19 |
20 | **第一步,找到network工具栏**
21 |
22 |
23 |
24 |
25 | **第二步,找到可以输入aid号的白色框**
26 |
27 |
28 |
29 |
30 | 3. 程序的oid号就是这里的aid号,每个视频都会分配一个号(叫做oid号)
31 |
32 |
33 |
34 |
35 | 4. 输入aid号(oid)
36 |
37 |
38 |
39 |
40 | 5. 输入oid
41 |
42 |
43 |
44 | 6. 评论开始爬取
45 |
46 | 
47 |
48 |
49 | 7. 程序结束之后,会在这个程序的同一级目录下成csv文件
50 |
51 |
52 |
53 |
54 | 8. 点击这个文件,就可以看到爬取的内容
55 |
56 | 
57 |
58 | 爬取结果图
59 |
60 | 
61 |
62 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | import tkinter as tk
2 | from tkinter import *
3 | from PIL import Image,ImageTk
4 | import sys
5 | #导入爬虫的包
6 | import b站
7 | import weibo
8 | import kuaishou
9 | import 小红书
10 |
11 | class myStdout(): # 重定向类
12 | def __init__(self):
13 | # 将其备份
14 | self.stdoutbak = sys.stdout
15 | self.stderrbak = sys.stderr
16 | # 重定向
17 | sys.stdout = self
18 | sys.stderr = self
19 |
20 | def write(self, info):
21 | # info信息即标准输出sys.stdout和sys.stderr接收到的输出信息
22 | t.insert('end', info) # 在多行文本控件最后一行插入print信息
23 | t.update() # 更新显示的文本,不加这句插入的信息无法显示
24 | t.see(tk.END) # 始终显示最后一行,不加这句,当文本溢出控件最后一行时,不会自动显示最后一行
25 |
26 | def restoreStd(self):
27 | # 恢复标准输出
28 | sys.stdout = self.stdoutbak
29 | sys.stderr = self.stderrbak
30 |
31 | # 创建一个爬虫调用函数
32 | def crawl() :
33 | # 用户输入的表达式,计算结果后转换为字符串
34 | oid = str(expression.get())
35 | if v.get() == 1:
36 | b站.crawlerB(oid)
37 | elif v.get() == 2:
38 | weibo.crawlerW(oid)
39 | elif v.get() == 3:
40 | kuaishou.crawlerK(oid)
41 | elif v.get() == 4:
42 | 小红书.crawlerX(oid)
43 |
44 | def select():
45 | dict = {1: 'BiliBili', 2: '微博', 3: '快手', 4: '小红书'}
46 | strings = '您爬取的网站是' + dict.get(v.get()) + ',祝您学习愉快'
47 | print(strings)
48 | label['text']=strings
49 |
50 | def get_image(filename,width,height):
51 | im = Image.open(filename).resize((width,height))
52 | return ImageTk.PhotoImage(im)
53 |
54 | mystd = myStdout() # 实例化重定向类
55 |
56 | #创建主窗口
57 | root_window = tk.Tk()
58 | root_window.title("数据采集器")
59 | root_window.geometry("800x600")
60 | root_window['background'] = "#C9C9C9"
61 |
62 | #设置背景图片
63 | canvas_root = tk.Canvas(root_window,width=800,height=600)
64 | im_root = get_image("bg.png",800,600)
65 | canvas_root.create_image(400,300,image = im_root)
66 | canvas_root.pack()
67 |
68 | #设置程序的名称
69 | text = tk.Label(root_window,text = "数据采集器",font=('仿宋',20,'bold italic')).place(x = 400,y=20,anchor=CENTER)
70 |
71 | #配置单选按钮
72 | # IntVar() 用于处理整数类型的变量# 根据单选按钮的 value 值来选择相应的选项
73 | v = tk.IntVar()
74 | v.set(0)
75 | site = [('BiliBili',1),
76 | ('微博',2),
77 | ('快手',3),
78 | ('小红书',4)]
79 | x = 100
80 | for name,num in site:
81 | radio_button = tk.Radiobutton(root_window, text=name, fg='blue',font=('微软雅黑','16','bold'),variable=v, value=num,command=select).place(x = x,y=90,anchor=CENTER)
82 | x+=200
83 |
84 | frame = Frame (root_window)
85 | #创建一个Label控件
86 | label = Label (frame,text = "准备好了吗,要开始了")
87 | #创建一个Entry控件,读取用户输入的id号,将用户的输入表达式显示在Entry控件上
88 | entry = Entry (frame,width=40)
89 | expression = StringVar ()
90 | entry ["textvariable"] = expression
91 |
92 | #创建两个button按钮
93 | button1 = Button (root_window, text="开 始",font = ('微软雅黑','19','bold'),command=crawl,width=10,height=3)
94 | button2 = Button (root_window, text="结 束",font = ('微软雅黑','19','bold'),command=crawl,width=10,height=3)
95 | #Button控件位于窗体的右方
96 | button1.place(x = 600,y=120)
97 | button2.place(x = 600,y = 240)
98 |
99 | #设置Entry控件为焦点所在
100 | entry.focus ()
101 | frame.place(x = 400,y=140,anchor=CENTER)
102 | #Entry控件位于窗体的上方
103 | entry.pack()
104 | #Label控件位于窗体的左方
105 | label.pack (side="left")
106 |
107 | #实例化多行文本
108 | t = tk.Text(root_window) # 创建多行文本控件
109 | t.place(height= 170,x = 400,y = 520,anchor=CENTER) # 布局在窗体上
110 |
111 |
112 | root_window.resizable(False,False)
113 | root_window.mainloop()
114 | mystd.restoreStd() # 恢复标准输出
--------------------------------------------------------------------------------
/weibo.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import csv #方便存储数据
3 | import time #防止被微博识别爬虫,让速度慢些
4 | import json
5 | import os
6 |
7 | headers = {
8 | "cookie": "WEIBOCN_FROM=1110006030; __bid_n=185a50c042fd8547904207; FPTOKEN=F4rJG97CzHJQPbKVLkubuFegQWs4Mzu6wP7MW4et/lC9gr3OfWX29sXWbxaDpK/GYLxdqnZWV9nbyd/VhlAD/n4yeznYUhi0HodghRxfWJKYB+nsZE+jW4ddummj9fWkhpXHBVPH1y5JR/BMqH/AsHbQ5TTiYCUJ6+TrTBp3SLdv2re18NKpc8xgcpyHJsRSxtFBj/zjrMRZgRq+BbwEvxW99hNQOeAP8UXMKsyEWHyGgJZNcRY4Eyi/m8qd0K6vGpUrbyyUKJIPJ0JvCzAVxocYEpl6YK2sOhrUCHmWOzWtQJH3U8KBFJcmO60tg5K7WegsmzqOAFX4jEMUUMKlI9nzbk3a4kqv1+dywZ9TPzjgUHix94eo6itLcPG2X3mOHU2aibHypbe5XLLqJ6qWkw==|Fxd1VhK1uLZNBpf4Cg3ua3JAJzmqCwkQrOb2LM/fWm8=|10|be0ef873a2c0aa276dae05239ff82eec; SUB=_2A25Ou7HqDeRhGeFL71UU9CrNwzuIHXVqR9-irDV6PUJbkdAKLVfEkW1NQhKzMR9v0Rsv_vicrGc2P3JGELqzGjuq; MLOGIN=1; _T_WM=87010392536; M_WEIBOCN_PARAMS=oid%3D4839399348766717%26luicode%3D20000061%26lfid%3D4839399348766717; WEIBOCN_WM=3349; XSRF-TOKEN=fcae7f",
9 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
10 | "x-requested-with": "XMLHttpRequest"
11 | }
12 |
13 | def crawler(id):
14 | url = "https://m.weibo.cn/comments/hotflow?id="+str(id)+"&mid="+str(id)+"&max_id_type=0"
15 | f = open(id+".csv",mode ='w',newline='',encoding='utf-8-sig')
16 | csv_writer = csv.DictWriter(f,fieldnames=[
17 | '用户id',
18 | '用户',
19 | '评论日期',
20 | '评论内容'
21 | ])
22 | csv_writer.writeheader() #创建表头
23 | mid = ''
24 |
25 | r = requests.get(url,headers=headers)
26 | json1 = json.loads(r.text, strict=False)
27 | # print(json1)
28 | try:
29 | datas = json1['data']
30 | except:
31 | return -1
32 | mid = datas['max_id']
33 |
34 | for data in datas['data']:
35 | dit = {
36 | '用户id':data['user']['id'],
37 | '用户':data['user']['screen_name'],
38 | '评论日期':data['created_at'],
39 | '评论内容':data['text'].split('<')[0]
40 | }
41 | print(dit)
42 | csv_writer.writerow(dit)
43 | for i in range(100):
44 | flag = 0
45 | try:
46 | url = "https://m.weibo.cn/comments/hotflow?id=" + str(id) + "&mid=" + str(id) + "&max_id=" + str(mid) + "&max_id_type=" + str(flag)
47 | r = requests.get(url, headers=headers)
48 | json1 = json.loads(r.text, strict=False)
49 | datas = json1['data']
50 | except:
51 | flag = 1
52 | url = "https://m.weibo.cn/comments/hotflow?id=" + str(id) + "&mid=" + str(id) + "&max_id=" + str(mid) + "&max_id_type=" + str(flag)
53 | r = requests.get(url, headers=headers)
54 | json1 = json.loads(r.text, strict=False)
55 | datas = json1['data']
56 | mid = datas['max_id']
57 | if mid == 0: # 最后一页的max_id = 0用来结束循环
58 | break
59 | time.sleep(1)
60 | for data in datas['data']:
61 | dit = {
62 | '用户id': data['user']['id'],
63 | '用户': data['user']['screen_name'],
64 | '评论日期': data['created_at'],
65 | '评论内容': data['text'].split('<')[0]
66 | }
67 | print(dit)
68 | csv_writer.writerow(dit)
69 | return 1
70 |
71 | def existdir():
72 | isExists = os.path.exists('微博')
73 | if not isExists:
74 | os.mkdir('微博')
75 | else:
76 | pass
77 | os.chdir('微博')
78 |
79 | def crawlerW(oid):
80 | existdir()
81 | url = oid
82 | crawler(url)
83 | os.chdir('../')
84 | print("爬取完成!!!")
85 |
86 | if __name__ == '__main__':
87 | print("请输入微博网址:")
88 | url1 = input()
89 | res = crawler(url1)
90 |
91 |
92 |
--------------------------------------------------------------------------------
/b站.py:
--------------------------------------------------------------------------------
1 | # -*- coding = utf-8 -*-
2 | # @Time:2022/8/21 9:11
3 | # Author:李小宝
4 | # @File:b站.py
5 | # @Software:PyCharm
6 |
7 | import os
8 | import re
9 | import requests
10 | import pandas as pd
11 | import json
12 | import time
13 | # from .main import crawler
14 |
15 | def crawler(page,oid):
16 | def json_load(_json):
17 | try:
18 | return json.loads(re.match(".*?({.*}).*",r.text,re.S).group(1))
19 | except:
20 | raise ValueError("invalid Input")
21 |
22 | url = "https://api.bilibili.com/x/v2/reply/main?callback=jQuery17203267765874610167_1661044064860&jsonp=jsonp&next={}&type=1&oid={}&mode=3&plat=1&_=1661044481599".format(page,oid)
23 | headers = {
24 | "referer": "https://www.bilibili.com/bangumi/play/ss24049?spm_id_from=333.337.0.0",
25 | "user-agent": "Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML, likeGecko)Chrome/104.0.0.0Safari/537.36",
26 | "cookie": "buvid3=0DC3AE86-B5F5-1EBB-4D34-54E7FABB8E4150566infoc;i-wanna-go-back=-1;_uuid=F487DE13-131C-3E104-71D6-5238107DBC97F51111infoc;buvid4=B9986AC5-791B-9433-A77F-0287BB180D3E56168- 022021813-6FTBgjXvldgy1K9EYdC7Tw % 3D % 3D;rpdid = | (k | k)u) | mlm0J'uYRluYk)l); buvid_fp_plain=undefined; CURRENT_BLACKGAP=0; blackside_state=1; AMCV_98CF678254E93B1B0A4C98A5%40AdobeOrg=1176715910%7CMCMID%7C07446268011832996772434268923758195031%7CMCAAMLH-1656938177%7C11%7CMCAAMB-1656938177%7CRKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y%7CMCOPTOUT-1656340577s%7CNONE%7CvVersion%7C5.4.0; nostalgia_conf=-1; LIVE_BUVID=AUTO5216587103243819; is-2022-channel=1; hit-dyn-v2=1; CURRENT_QUALITY=0; fingerprint=aa91a8a810eafbff367c3d5bbd8f282f; SESSDATA=8cf916ed%2C1676291744%2Cb2927%2A81; bili_jct=720e789e981e23b3da959400f6fb245b; DedeUserID=669273416; DedeUserID__ckMd5=1a1c9f1ff88a08bf; buvid_fp=9e855698858a6222ac092a6ae37534f7; b_ut=5; bsource=search_bing; sid=57ex0ucl; PVID=2; innersign=1; CURRENT_FNVAL=4048; b_lsid=103E426E5_182BDC413F6; bp_video_offset_669273416=696645941711601700; b_timer=%7B%22ffp%22%3A%7B%22333.1007.fp.risk_0DC3AE86%22%3A%22182BB1E35B3%22%2C%22333.788.fp.risk_0DC3AE86%22%3A%22182BB96916D%22%2C%22333.337.fp.risk_0DC3AE86%22%3A%22182BDC74F32%22%2C%22333.999.fp.risk_0DC3AE86%22%3A%22182AEC41D3C%22%2C%22333.937.fp.risk_0DC3AE86%22%3A%22182BDC700A1%22%2C%22333.1193.fp.risk_0DC3AE86%22%3A%22182BDC7500B%22%2C%22666.25.fp.risk_0DC3AE86%22%3A%22182BDCBEC84%22%2C%22333.905.fp.risk_0DC3AE86%22%3A%22182BDE258CD%22%7D%7D"
27 | }
28 | r = requests.get(url =url ,headers=headers)
29 | ta = json_load(r.text)
30 | # print(ta)
31 | dic = ta['data']['replies']
32 | content = []
33 | utime = []
34 | cname = []
35 | if dic is not None:
36 | for i in dic:
37 | message = i['content']['message']
38 | print(message)
39 | content.append(message)
40 | ctime = i['ctime']
41 | timeArray = time.localtime(ctime)
42 | true_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
43 | print(true_time)
44 | utime.append(true_time)
45 | name = i['member']['uname']
46 | print(name)
47 | cname.append(name)
48 | datas = {
49 | "uname":cname,
50 | "content":content,
51 | "ctime":utime
52 | }
53 | csv =pd.DataFrame(datas)
54 | if page==1:
55 | csv.to_csv(oid+".csv",sep=',',index=False,header=True,encoding='utf-8-sig',mode='a')
56 | else:
57 | csv.to_csv(oid+".csv", sep=',', index=False, header=False, encoding='utf-8-sig', mode='a')
58 | return page,oid
59 |
60 | def existdir():
61 | isExists = os.path.exists('B站')
62 | time.sleep(3)
63 | if not isExists:
64 | os.mkdir('B站')
65 | else:
66 | pass
67 | os.chdir('B站')
68 |
69 | def crawlerB(oid):
70 | existdir()
71 | for page in range(0,100):
72 | crawler(page, oid)
73 | os.chdir('../')
74 | print("爬取完成!!!")
75 |
76 | if __name__ =="__main__":
77 | oid = str(input("请输入视频的oid号:"))
78 | for page in range(0,100):
79 | crawler(page,oid)
80 | print("爬取完成!!!")
81 |
82 |
--------------------------------------------------------------------------------
/小红书.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import json
3 | import time
4 | import csv
5 | import execjs
6 | import os
7 |
8 | js_code = open('x_s.js', encoding='utf-8').read()
9 | ctx = execjs.compile(js_code)
10 | def crawler(pid,cursor):
11 | global dits,ctx
12 | url = "https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id={}&cursor={}".format(pid,cursor)
13 | # 第一个参数为ja代码中的函数名, 后面为函数对应的参数
14 | # time.sleep(2)
15 | x_t = int((time.time()+8)*1000)
16 | print(str(x_t)+'test/api/sns/web/v2/comment/page?note_id='+str(pid)+'&cursor=')
17 | x_s = ctx.call('get_x', str(x_t)+'test/api/sns/web/v2/comment/page?note_id='+str(pid)+'&cursor='+str(cursor))
18 | print(x_t,x_s)
19 | headers = {
20 | "referer": "https://www.xiaohongshu.com/",
21 | "user-agent": "Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML, like Gecko)Chrome/108.0.0.0 Safari/537.36",
22 | "cookie": "a1=1863fc82a22frc98nhoukuwwz5dheb75wsyioroyv50000330561; webId=a73e00435be81747e88424490c51610f; gid=yYKqiSYJfdE4yYKqiSYJ0MFlJJiFSjYIxl7Tvvh7EEu2f328xdDW2l888qq82Ky8Y82d4Y80; gid.sign=tFOpSazWEtJ2kdna1dZqoXzCO2E=; xhsTrackerId=7b4e4740-ce70-4d4b-83a8-aab0b5ff4c5a; xhsTrackerId.sig=zAACsXyWfrGO5ux0nlzxJBmGxEpkx_Yd3eH1Lka0lXc; xsecappid=xhs-pc-web; xhsTracker=url=explore&xhsshare=QQ; xhsTracker.sig=iSWaEcun305KzSS3ZhAMZ5J8ORQ4gAiwUyB-ByOnu6o; web_session=0400698f28a05c564cfd42dade314b54abc684; extra_exp_ids=h5_1208_exp3,h5_1130_origin,ios_wx_launch_open_app_exp,h5_video_ui_exp3,wx_launch_open_app_duration_origin,ques_exp2; extra_exp_ids.sig=ua6MfqPmWNei3g281auEK3fEXC8GM_g6TlXVgkXr1I4; websectiga=3fff3a6f9f07284b62c0f2ebf91a3b10193175c06e4f71492b60e056edcdebb2; sec_poison_id=6ddf23ac-ddb4-4ea6-a139-92d6de2c3167",
23 | "accept": "application/json",
24 | "content-type": "application/json;charset=utf-8",
25 | # "x-b3-traceid":"0fa5414ce957aa16",
26 | "x-s": x_s,
27 | "x-t": str(x_t),
28 | }
29 | print(url)
30 | try:
31 | r = requests.get(headers=headers,url = url)
32 | json1 = json.loads(r.text, strict=False)
33 | print(json1)
34 | datas = json1['data']
35 | print(datas)
36 | cur = datas['cursor']
37 | print(cur)
38 | for data in datas['comments']:
39 | id = data['id']
40 | nikename = data['user_info']["nickname"]
41 | content = data['content']
42 | t = int(data['create_time']//1000)
43 | time1 = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(t))
44 | dit = {
45 | '用户id': id,
46 | '用户': nikename,
47 | '评论日期': time1,
48 | '评论内容': content
49 | }
50 | if content[0] == '@':
51 | continue
52 | else:
53 | dits.append(dit)
54 | print(dit)
55 | crawler(pid,cur)
56 | except:
57 | return
58 | return
59 |
60 | # print(dit)
61 | def existdir():
62 | isExists = os.path.exists('小红书')
63 | if not isExists:
64 | os.mkdir('小红书')
65 | else:
66 | pass
67 | os.chdir('小红书')
68 |
69 | dits = []
70 | def crawlerX(pid):
71 | existdir()
72 | f = open(pid + ".csv", mode='w', newline='', encoding='utf-8-sig')
73 | csv_writer = csv.DictWriter(f, fieldnames=[
74 | '用户id',
75 | '用户',
76 | '评论日期',
77 | '评论内容'
78 | ])
79 | csv_writer.writeheader() # 创建表头
80 | crawler(pid,"")
81 | # print(dits)
82 | for dit in dits:
83 | csv_writer.writerow(dit)
84 | os.chdir('../')
85 | print("爬取完成!!!")
86 |
87 | if __name__ == '__main__':
88 | dits = []
89 | print("请输入note_id号:")
90 | pid = input()
91 | f = open(pid + ".csv", mode='w', newline='', encoding='utf-8-sig')
92 | csv_writer = csv.DictWriter(f, fieldnames=[
93 | '用户id',
94 | '用户',
95 | '评论日期',
96 | '评论内容'
97 | ])
98 | csv_writer.writeheader() # 创建表头
99 | crawler(pid,'')
100 | print(dits)
101 | for dit in dits:
102 | csv_writer.writerow(dit)
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/kuaishou.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import csv #方便存储数据
3 | import os
4 | import time
5 |
6 | def callback(next_str_value,photoId):
7 | global dits
8 | url = "https://www.kuaishou.com/graphql"
9 | head = {
10 | "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46",
11 | "Cookie" : "did=web_c746d31654a566f08fa1375a6908f797; didv=1670143728343; kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; soft_did=1619580708547; _bl_uid=10lCyb40eCtqqd7kk2hXl1kn89I9; client_key=65890b29; kuaishou.web.cp.api_st=ChZrdWFpc2hvdS53ZWIuY3AuYXBpLnN0EqABgnwTfQkm_XXKzQQWpglFV-M6g9GmTnh5hWn7ZHASEnlv4KDPqV0YdRAS_sAS3fBrQQytPJOXv6GuguuaKO5s68aGnsMxTAv1ftDaq-971FI8K69EbtfRZYBUIuNFxGNoqv0Nz-aOvjqBbigpyDMD6hyzy9MfvFovNhyid3E-Ab0jE6_6TnYUz8LYUZ__AEHxkQHsGYavR3XuKhzAuZAdVxoSw3qBS3pld45Ots5myM_60sjTIiBpQJnPZxZAq8WFjSraVLxHVUJEpvOjeQnACaPjOhmHdigFMAE; kuaishou.web.cp.api_ph=e13f0ba0a9021465a14191a295ab3cf683a4; ksliveShowClipTip=true; userId=2057276035; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABElRJTtJTYwSvi7UFU57Sme0ePwqtQU7PRIgZSfAJ51Qtd42NMKh6xtcayMKc3rUqKM62kw95HPdNlRIPfe9VrPe8MDNsMJzOs3TBK8qtzKNl-c8UJkSZ7aQnhkSgtTYXPexLjwj5HKthbmtE7XypiNqn25zCnITYH7iWv9AHjEuoQOm4ijiaEjnYO2cdijL_CkKexv8dmNv3r2NHUO7L-BoS-1Rj5-IBBNoxoIePYcxZFs4oIiANWvyOwIUaStVVHdGa_T9z7SD8d7a4lMVz3_oOs0fnhygFMAE; kuaishou.server.web_ph=f53cb27f0b53c9383770feaa399d7c7bbe4a"
12 | }
13 | value = {
14 | "operationName": "commentListQuery",
15 | "variables": {
16 | "photoId": photoId,
17 | "pcursor": next_str_value
18 | },
19 | "query": "query commentListQuery($photoId: String, $pcursor: String) {\n visionCommentList(photoId: $photoId, pcursor: $pcursor) {\n commentCount\n pcursor\n rootComments {\n commentId\n authorId\n authorName\n content\n headurl\n timestamp\n likedCount\n realLikedCount\n liked\n status\n subCommentCount\n subCommentsPcursor\n subComments {\n commentId\n authorId\n authorName\n content\n headurl\n timestamp\n likedCount\n realLikedCount\n liked\n status\n replyToUserName\n replyTo\n __typename\n }\n __typename\n }\n __typename\n }\n}\n"
20 | }
21 |
22 | return_json = requests.post(url=url,headers=head,json=value)
23 | return_json_to_json = return_json.json()
24 | try:
25 | data = list(return_json_to_json["data"]["visionCommentList"]["rootComments"])
26 | next_pcursor =str(return_json_to_json["data"]["visionCommentList"]["pcursor"])
27 | except:
28 | print("爬取成功")
29 | return
30 | for i in data:
31 | authorname = i["authorName"]
32 | content= i["content"]
33 | print(authorname," : ",content)
34 | time1 = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(i['timestamp'] // 1000)))
35 | dit = {
36 | '用户id': i['authorId'],
37 | '用户': i["authorName"],
38 | '评论日期': time1,
39 | '评论内容': i["content"]
40 | }
41 | print(dit)
42 | if i["content"][0] == '@':
43 | continue
44 | else:
45 | dits.append(dit)
46 | callback(next_pcursor,photoId)
47 | return 1
48 |
49 | def existdir():
50 | isExists = os.path.exists('快手')
51 | if not isExists:
52 | os.mkdir('快手')
53 | else:
54 | pass
55 | os.chdir('快手')
56 |
57 | dits = []
58 | def crawlerK(pid):
59 | existdir()
60 | f = open(pid + ".csv", mode='w', newline='', encoding='utf-8-sig')
61 | csv_writer = csv.DictWriter(f, fieldnames=[
62 | '用户id',
63 | '用户',
64 | '评论日期',
65 | '评论内容'
66 | ])
67 | csv_writer.writeheader() # 创建表头
68 | callback('', pid)
69 | # print(dits)
70 | for dit in dits:
71 | csv_writer.writerow(dit)
72 | os.chdir('../')
73 | print("爬取完成!!!")
74 |
75 | if __name__ == '__main__':
76 | dits = []
77 | print("请输入id")
78 | pid = input()
79 | f = open(pid+".csv",mode ='w',newline='',encoding='utf-8-sig')
80 | csv_writer = csv.DictWriter(f,fieldnames=[
81 | '用户id',
82 | '用户',
83 | '评论日期',
84 | '评论内容'
85 | ])
86 | csv_writer.writeheader() #创建表头
87 | callback('',pid)
88 | print(dits)
89 | for dit in dits:
90 | csv_writer.writerow(dit)
--------------------------------------------------------------------------------
/x_s.js:
--------------------------------------------------------------------------------
1 |
2 | function stringToBytes(str){
3 | var bytes = new Array();
4 | for (var i = 0; i < str.length; i++) {
5 | var c = str.charCodeAt(i);
6 | var s = parseInt(c).toString(2);
7 | if(c >= parseInt("000080",16) && c <= parseInt("0007FF",16)){
8 | var af = "";
9 | for(var j = 0; j < (11 - s.length); j++){
10 | af += "0";
11 | }
12 | af += s;
13 | var n1 = parseInt("110" + af.substring(0,5),2);
14 | var n2 = parseInt("110" + af.substring(5),2);
15 | if(n1 > 127) n1 -= 256;
16 | if(n2 > 127) n2 -= 256;
17 | bytes.push(n1);
18 | bytes.push(n2);
19 | }else if(c >= parseInt("000800",16) && c <= parseInt("00FFFF",16)){
20 | var af = "";
21 | for(var j = 0; j < (16 - s.length); j++){
22 | af += "0";
23 | }
24 | af += s;
25 | var n1 = parseInt("1110" + af.substring(0,4),2);
26 | var n2 = parseInt("10" + af.substring(4,10),2);
27 | var n3 = parseInt("10" + af.substring(10),2);
28 | if(n1 > 127) n1 -= 256;
29 | if(n2 > 127) n2 -= 256;
30 | if(n3 > 127) n3 -= 256;
31 | bytes.push(n1);
32 | bytes.push(n2);
33 | bytes.push(n3);
34 | }else if(c >= parseInt("010000",16) && c <= parseInt("10FFFF",16)){
35 | var af = "";
36 | for(var j = 0; j < (21 - s.length); j++){
37 | af += "0";
38 | }
39 | af += s;
40 | var n1 = parseInt("11110" + af.substring(0,3),2);
41 | var n2 = parseInt("10" + af.substring(3,9),2);
42 | var n3 = parseInt("10" + af.substring(9,15),2);
43 | var n4 = parseInt("10" + af.substring(15),2);
44 | if(n1 > 127) n1 -= 256;
45 | if(n2 > 127) n2 -= 256;
46 | if(n3 > 127) n3 -= 256;
47 | if(n4 > 127) n4 -= 256;
48 | bytes.push(n1);
49 | bytes.push(n2);
50 | bytes.push(n3);
51 | bytes.push(n4);
52 | }else{
53 | bytes.push(c & 0xff);
54 | }
55 | }
56 | return bytes;
57 | }
58 | je = {
59 | yJKwt: function(e, t) {
60 | return e == t
61 | },
62 | // equEW: Fe(339, 409),
63 | ouYkV: function(e, t) {
64 | return e(t)
65 | },
66 | IJign: function(e, t) {
67 | return e < t
68 | },
69 | dniCc: function(e, t) {
70 | return e | t
71 | },
72 | VkIPm: function(e, t) {
73 | return e & t
74 | },
75 | ZtWnB: function(e, t) {
76 | return e | t
77 | },
78 | EaGMZ: function(e, t) {
79 | return e << t
80 | },
81 | osyIw: function(e, t) {
82 | return e >>> t
83 | },
84 | iLsmf: function(e, t) {
85 | return e & t
86 | },
87 | ZqSNz: function(e, t) {
88 | return e >>> t
89 | },
90 | RyZJx: function(e, t) {
91 | return e << t
92 | },
93 | VsHtM: function(e, t) {
94 | return e % t
95 | },
96 | zcTWF: function(e, t) {
97 | return e >>> t
98 | },
99 | nlHfL: function(e, t, r, n, o, i, a, s) {
100 | var u = je['DTrbr'](je['DTrbr'](je['DTrbr'](e, je['hdBwq'](t, r) | ~t & o), i >>> 0), s) ;
101 | // console.log((u << a | je['jNjih'](u, je['sUGSI'](32, a))) + t)
102 | return (u << a | je['jNjih'](u, je['sUGSI'](32, a))) + t
103 | },
104 | VrFqQ: function(e, t) {
105 | return e + t
106 | },
107 | HSFDJ: function(e, t) {
108 | return e + t
109 | },
110 | QrePf: function(e, t, r, n, o, i, a, s) {
111 | return e(t, r, n, o, i, a, s)
112 | },
113 | mEQOt: function(e, t) {
114 | return e + t
115 | },
116 | ZCQZb: function(e, t) {
117 | return e + t
118 | },
119 | ZovIz: function(e, t) {
120 | return e + t
121 | },
122 | umick: function(e, t) {
123 | return e + t
124 | },
125 | FTPBq: function(e, t, r, n, o, i, a, s) {
126 | return e(t, r, n, o, i, a, s)
127 | },
128 | oBWZm: function(e, t) {
129 | return e + t
130 | },
131 | SYlVm: function(e, t, r, n, o, i, a, s) {
132 | return e(t, r, n, o, i, a, s)
133 | },
134 | hrtXX: function(e, t) {
135 | return e + t
136 | },
137 | hewPW: function(e, t, r, n, o, i, a, s) {
138 | return e(t, r, n, o, i, a, s)
139 | },
140 | mtrIN: function(e, t, r, n, o, i, a, s) {
141 | return e(t, r, n, o, i, a, s)
142 | },
143 | FmHfQ: function(e, t) {
144 | return e + t
145 | },
146 | XrZOl: function(e, t) {
147 | return e + t
148 | },
149 | utmmN: function(e, t, r, n, o, i, a, s) {
150 | return e(t, r, n, o, i, a, s)
151 | },
152 | pWobk: function(e, t) {
153 | return e + t
154 | },
155 | FJlYN: function(e, t) {
156 | return e + t
157 | },
158 | ikxhY: function(e, t) {
159 | return e + t
160 | },
161 | FlYEl: function(e, t, r, n, o, i, a, s) {
162 | return e(t, r, n, o, i, a, s)
163 | },
164 | RIxMF: function(e, t, r, n, o, i, a, s) {
165 | return e(t, r, n, o, i, a, s)
166 | },
167 | PKFOs: function(e, t, r, n, o, i, a, s) {
168 | return e(t, r, n, o, i, a, s)
169 | },
170 | VigAS: function(e, t) {
171 | return e + t
172 | },
173 | fDqvJ: function(e, t, r, n, o, i, a, s) {
174 | return e(t, r, n, o, i, a, s)
175 | },
176 | eqJQh: function(e, t) {
177 | return e + t
178 | },
179 | bAHys: function(e, t, r, n, o, i, a, s) {
180 | return e(t, r, n, o, i, a, s)
181 | },
182 | iCeWb: function(e, t, r, n, o, i, a, s) {
183 | return e(t, r, n, o, i, a, s)
184 | },
185 | CcWZI: function(e, t, r, n, o, i, a, s) {
186 | return e(t, r, n, o, i, a, s)
187 | },
188 | FMbVd: function(e, t) {
189 | return e + t
190 | },
191 | zuvxQ: function(e, t) {
192 | return e + t
193 | },
194 | JQFwK: function(e, t, r, n, o, i, a, s) {
195 | return e(t, r, n, o, i, a, s)
196 | },
197 | ZcThI: function(e, t) {
198 | return e + t
199 | },
200 | seQxp: function(e, t) {
201 | return e + t
202 | },
203 | EXcRE: function(e, t) {
204 | return e + t
205 | },
206 | XefZY: function(e, t, r, n, o, i, a, s) {
207 | return e(t, r, n, o, i, a, s)
208 | },
209 | lNrTk: function(e, t, r, n, o, i, a, s) {
210 | return e(t, r, n, o, i, a, s)
211 | },
212 | NJbVq: function(e, t) {
213 | return e + t
214 | },
215 | jGXbA: function(e, t, r, n, o, i, a, s) {
216 | return e(t, r, n, o, i, a, s)
217 | },
218 | vtfIx: function(e, t) {
219 | return e + t
220 | },
221 | aqFcP: function(e, t, r, n, o, i, a, s) {
222 | return e(t, r, n, o, i, a, s)
223 | },
224 | lPcUs: function(e, t, r, n, o, i, a, s) {
225 | return e(t, r, n, o, i, a, s)
226 | },
227 | YdZUX: function(e, t) {
228 | return e + t
229 | },
230 | YplIo: function(e, t) {
231 | return e + t
232 | },
233 | zYvVY: function(e, t) {
234 | return e + t
235 | },
236 | NqdOs: function(e, t) {
237 | return e + t
238 | },
239 | NgZdN: function(e, t, r, n, o, i, a, s) {
240 | return e(t, r, n, o, i, a, s)
241 | },
242 | zAgxb: function(e, t, r, n, o, i, a, s) {
243 | return e(t, r, n, o, i, a, s)
244 | },
245 | evgkK: function(e, t, r, n, o, i, a, s) {
246 | return e(t, r, n, o, i, a, s)
247 | },
248 | ZFsux: function(e, t) {
249 | return e + t
250 | },
251 | exbUE: function(e, t, r, n, o, i, a, s) {
252 | return e(t, r, n, o, i, a, s)
253 | },
254 | UBTfA: function(e, t) {
255 | return e + t
256 | },
257 | lxizm: function(e, t) {
258 | return e >>> t
259 | },
260 | jNjih: function(e, t) {
261 | return e >>> t
262 | },
263 | okBzj: function(e, t) {
264 | return e + t
265 | },
266 | sfGbf: function(e, t) {
267 | return e + t
268 | },
269 | DTrbr: function(e, t) {
270 | return e + t
271 | },
272 | hdBwq: function(e, t) {
273 | return e & t
274 | },
275 | sUGSI: function(e, t) {
276 | return e - t
277 | },
278 | IFKdN: function(e, t) {
279 | return e | t
280 | },
281 | lxWQh: function(e, t) {
282 | return e + t
283 | },
284 | anwja: function(e, t) {
285 | return e ^ t
286 | },
287 | iFBAC: function(e, t) {
288 | return e | t
289 | },
290 | uyyzO: function(e, t) {
291 | return e >>> t
292 | },
293 | vzTOk: function(e, t) {
294 | return e - t
295 | },
296 | vyJGG: function(e, t) {
297 | return e | t
298 | },
299 | WIPRR: function(e, t) {
300 | return e + t
301 | },
302 | zsDDZ: function(e, t) {
303 | return e | t
304 | },
305 | YMxdG: function(e, t) {
306 | return e << t
307 | },
308 | azoqU: function(e, t) {
309 | return e >>> t
310 | },
311 | xNlWe: function(e, t) {
312 | return e - t
313 | },
314 | BOxTP: function(e, t) {
315 | return e === t
316 | },
317 | pYOkL: function(e, t) {
318 | return e === t
319 | },
320 | AfphX: function(e, t) {
321 | return e + t
322 | },
323 | // CfrgZ: Fe(298, n) + Fe(392, 533) + Fe(o, 233),
324 | QamKK: function(e, t, r) {
325 | return e(t, r)
326 | },
327 | ahauZ: function(e, t) {
328 | return e(t)
329 | },
330 | iwjwj: function(e, t) {
331 | return e(t)
332 | },
333 | zmtpi: function(e, t) {
334 | return e(t)
335 | }
336 | };
337 | function bytesToWords(bytes) {
338 | for(var words = [],i = 0,b = 0;i>>5]|=bytes[i]<<(24-b%32);
340 | return words;
341 | }
342 |
343 | function _ff(e, t, r, o, i, a, s) {
344 | var u = je['DTrbr'](je['DTrbr'](je['DTrbr'](e, je['hdBwq'](t, r) | ~t & o), i >>> 0), s) ;
345 | // console.log((u << a | je['jNjih'](u, je['sUGSI'](32, a))) + t)
346 | return (u << a | je['jNjih'](u, je['sUGSI'](32, a))) + t
347 | }
348 | function _gg(e, t, r, n, o, i, a) {
349 | var s = 654
350 | , u = je["DTrbr"](je["DTrbr"](e, je["hdBwq"](t, n) | je["hdBwq"](r, ~n)), o >>> 0) + a;
351 | function l(e, t) {
352 | return Eo(t, e - s)
353 | }
354 | return je['DTrbr'](je['IFKdN'](je["RyZJx"](u, i), je["jNjih"](u, je["sUGSI"](32, i))), t)
355 | }
356 | function _hh(e, r, n, o, i, a, s) {
357 | var l = je["lxWQh"](je["lxWQh"](e, je["anwja"](r, n) ^ o) + je["jNjih"](i, 0), s);
358 | return je["lxWQh"](je["iFBAC"](l << a, je["uyyzO"](l, je["vzTOk"](32, a))), r)
359 | }
360 | function _ii(e, t, r, n, o, i, a) {
361 | var s = 326
362 | , u = je["lxWQh"](e, je["anwja"](r, je["vyJGG"](t, ~n))) + je["uyyzO"](o, 0) + a;
363 | return je["WIPRR"](je["zsDDZ"](je["YMxdG"](u, i), je["azoqU"](u, je["xNlWe"](32, i))), t)
364 | }
365 | function f1(e,t){
366 | return e>>>t
367 | }
368 | function f2(e,t){
369 | return e<>> 8));
403 | i[je['ZqSNz'](a, 5)] |= je['RyZJx'](128, je['VsHtM'](a, 32)),
404 | i[14 + (je['zcTWF'](a + 64, 9) << 4)] = a;
405 | // console.log(a)
406 | var d = _ff
407 | , f = _gg
408 | , _ = _hh
409 | , g = _ii;
410 | // console.log(d,f,_,g)
411 | for (p = 0; p < i.length; p += 16) {
412 | var h = s
413 | , m = u
414 | , v = l
415 | , y = c;
416 | // console.log(h,m,v,y,i.length)
417 | s = d(s, u, l, c, i[je['VrFqQ'](p, 0)], 7, -680876936),
418 | c = d(c, s, u, l, i[je['HSFDJ'](p, 1)], 12, -389564586),
419 | l = d(l, c, s, u, i[je['HSFDJ'](p, 2)], 17, 606105819),
420 | u = je['QrePf'](d, u, l, c, s, i[je['mEQOt'](p, 3)], 22, -1044525330),
421 | s = je['QrePf'](d, s, u, l, c, i[je['mEQOt'](p, 4)], 7, -176418897),
422 | c = je['QrePf'](d, c, s, u, l, i[je['ZCQZb'](p, 5)], 12, 1200080426),
423 | l = je['QrePf'](d, l, c, s, u, i[je['ZCQZb'](p, 6)], 17, -1473231341),
424 | u = je['QrePf'](d, u, l, c, s, i[je['ZovIz'](p, 7)], 22, -45705983),
425 | s = je['QrePf'](d, s, u, l, c, i[je['umick'](p, 8)], 7, 1770035416),
426 | c = je['FTPBq'](d, c, s, u, l, i[je['oBWZm'](p, 9)], 12, -1958414417),
427 | l = je['FTPBq'](d, l, c, s, u, i[je['oBWZm'](p, 10)], 17, -42063),
428 | u = je['SYlVm'](d, u, l, c, s, i[je['hrtXX'](p, 11)], 22, -1990404162),
429 | s = je['hewPW'](d, s, u, l, c, i[p + 12], 7, 1804603682),
430 | l = d(l, c = d(c, s, u, l, i[je['hrtXX'](p, 13)], 12, -40341101), s, u, i[je['hrtXX'](p, 14)], 17, -1502002290),
431 | s = f(s, u = d(u, l, c, s, i[je['FmHfQ'](p, 15)], 22, 1236535329), l, c, i[je['XrZOl'](p, 1)], 5, -165796510),
432 | c = f(c, s, u, l, i[p + 6], 9, -1069501632),
433 | u = f(u, l = je['utmmN'](f, l, c, s, u, i[p + 11], 14, 643717713), c, s, i[je['XrZOl'](p, 0)], 20, -373897302),
434 | s = f(s, u, l, c, i[je['pWobk'](p, 5)], 5, -701558691),
435 | c = je['utmmN'](f, c, s, u, l, i[je['FJlYN'](p, 10)], 9, 38016083),
436 | l = je['utmmN'](f, l, c, s, u, i[je['FJlYN'](p, 15)], 14, -660478335),
437 | s = f(s, u = je['utmmN'](f, u, l, c, s, i[p + 4], 20, -405537848), l, c, i[p + 9], 5, 568446438),
438 | c = je['utmmN'](f, c, s, u, l, i[je['ikxhY'](p, 14)], 9, -1019803690),
439 | l = je['utmmN'](f, l, c, s, u, i[je['FJlYN'](p, 3)], 14, -187363961),
440 | u = je['FlYEl'](f, u, l, c, s, i[je['ikxhY'](p, 8)], 20, 1163531501),
441 | s = je['RIxMF'](f, s, u, l, c, i[je['ikxhY'](p, 13)], 5, -1444681467),
442 | l = f(l, c = je['PKFOs'](f, c, s, u, l, i[je['VigAS'](p, 2)], 9, -51403784), s, u, i[je['VigAS'](p, 7)], 14, 1735328473),
443 | u = je['PKFOs'](f, u, l, c, s, i[je['VigAS'](p, 12)], 20, -1926607734),
444 | s = je['fDqvJ'](_, s, u, l, c, i[je['eqJQh'](p, 5)], 4, -378558),
445 | c = je['bAHys'](_, c, s, u, l, i[je['eqJQh'](p, 8)], 11, -2022574463),
446 | l = je['iCeWb'](_, l, c, s, u, i[p + 11], 16, 1839030562),
447 | s = _(s, u = je['CcWZI'](_, u, l, c, s, i[je["eqJQh"](p, 14)], 23, -35309556), l, c, i[je['FMbVd'](p, 1)], 4, -1530992060),
448 | c = je['CcWZI'](_, c, s, u, l, i[je['zuvxQ'](p, 4)], 11, 1272893353),
449 | u = _(u, l = je['JQFwK'](_, l, c, s, u, i[je['ZcThI'](p, 7)], 16, -155497632), c, s, i[je['seQxp'](p, 10)], 23, -1094730640),
450 | s = je['JQFwK'](_, s, u, l, c, i[je['EXcRE'](p, 13)], 4, 681279174),
451 | c = je['JQFwK'](_, c, s, u, l, i[je['EXcRE'](p, 0)], 11, -358537222),
452 | l = je['XefZY'](_, l, c, s, u, i[je['EXcRE'](p, 3)], 16, -722521979),
453 | u = je['lNrTk'](_, u, l, c, s, i[je['NJbVq'](p, 6)], 23, 76029189),
454 | c = _(c, s = je['jGXbA'](_, s, u, l, c, i[je['NJbVq'](p, 9)], 4, -640364487), u, l, i[je['vtfIx'](p, 12)], 11, -421815835),
455 | u = _(u, l = je['aqFcP'](_, l, c, s, u, i[p + 15], 16, 530742520), c, s, i[p + 2], 23, -995338651),
456 | c = g(c, s = je['lPcUs'](g, s, u, l, c, i[je['vtfIx'](p, 0)], 6, -198630844), u, l, i[je['vtfIx'](p, 7)], 10, 1126891415),
457 | l = g(l, c, s, u, i[je['YdZUX'](p, 14)], 15, -1416354905),
458 | s = g(s, u = je['lPcUs'](g, u, l, c, s, i[je['YplIo'](p, 5)], 21, -57434055), l, c, i[je['zYvVY'](p, 12)], 6, 1700485571),
459 | c = je['lPcUs'](g, c, s, u, l, i[je['zYvVY'](p, 3)], 10, -1894986606),
460 | l = je['lPcUs'](g, l, c, s, u, i[je['zYvVY'](p, 10)], 15, -1051523),
461 | u = je['lPcUs'](g, u, l, c, s, i[je['zYvVY'](p, 1)], 21, -2054922799),
462 | s = je['lPcUs'](g, s, u, l, c, i[je['NqdOs'](p, 8)], 6, 1873313359),
463 | c = je['lPcUs'](g, c, s, u, l, i[je['NqdOs'](p, 15)], 10, -30611744),
464 | l = je['NgZdN'](g, l, c, s, u, i[p + 6], 15, -1560198380),
465 | u = je['NgZdN'](g, u, l, c, s, i[je['NqdOs'](p, 13)], 21, 1309151649),
466 | s = je['zAgxb'](g, s, u, l, c, i[p + 4], 6, -145523070),
467 | c = je['evgkK'](g, c, s, u, l, i[je['ZFsux'](p, 11)], 10, -1120210379),
468 | l = je['exbUE'](g, l, c, s, u, i[je['ZFsux'](p, 2)], 15, 718787259),
469 | u = je['exbUE'](g, u, l, c, s, i[je['UBTfA'](p, 9)], 21, -343485551),
470 | s = je['lxizm'](s + h, 0),
471 | u = je['jNjih'](je['okBzj'](u, m), 0),
472 | l = je['jNjih'](je['sfGbf'](l, v), 0),
473 | c = je['jNjih'](je['sfGbf'](c, y), 0)
474 | }
475 | // console.log([s, u, l, c])
476 | // console.log(endian([s, u, l, c]))
477 | return endian([s, u, l, c])
478 | };
479 | function RFEXt(e, t) {
480 | return e >>> t
481 | }
482 | function QYcqT(e, t) {
483 | return e % t
484 | }
485 | function UmEFi(e, t) {
486 | return e - t
487 | }
488 | function nvthD(e, t) {
489 | return e >>> t
490 | }
491 |
492 | function wordsToBytes(e) {
493 | for (var t = [], r = 0; r<128; r += 8)
494 | t.push(255 & nvthD(e[RFEXt(r, 5)], UmEFi(24, QYcqT(r, 32))));
495 | return t
496 | }
497 |
498 | function nhxOh(e, t) {
499 | return e >>> t
500 | }
501 | function mUkhF(e, t) {
502 | return e & t
503 | }
504 | function bytesToHex(e) {
505 | for (var r = [], n = 0; n < 16; n++)
506 | r['push'](nhxOh(e[n], 4)['toString'](16)),
507 | r['push'](mUkhF(15, e[n])['toString'](16));
508 | return r['join']("")
509 | }
510 | _r = {
511 | YcAap: function(e, t) {
512 | return et
516 | },
517 | IYqgI: function(e, t) {
518 | return e>t
522 | },
523 | yESQQ: function(e, t) {
524 | return e|t
525 | },
526 | DLqdJ: function(e, t) {
527 | return e&t
528 | },
529 | ntwtB: function(e, t) {
530 | return e>>t
531 | },
532 | XhOLE: function(e, t) {
533 | return e|t
534 | },
535 | OUXTe: function(e, t) {
536 | return e&t
537 | },
538 | lPLEl: function(e, t) {
539 | return e>>t
540 | },
541 | HiDFY: function(e, t) {
542 | return e&t
543 | },
544 | // KfTYt: ur[cr(1352, _)],
545 | Swijz: function(e, t) {
546 | return e(t)
547 | },
548 | TgopC: function(e, t) {
549 | return e|t
550 | },
551 | uytRs: function(e, t) {
552 | return e<>t
559 | },
560 | rniTJ: function(e, t) {
561 | return e>>t
562 | },
563 | vZHUx: function(e, t) {
564 | return e&t
565 | },
566 | trZBo: function(e, t) {
567 | // var r, n;
568 | // return ur[(r = Je,
569 | // n = Qe,
570 | // cr(r - -1143, n))](e, t)
571 | },
572 | yAgFW: function(e, t) {
573 | return e + t
574 | },
575 | cvnJR: function(e, t) {
576 | return e+t
577 | },
578 | ezOMc: function(e, t) {
579 | return e+t
580 | }
581 | };
582 |
583 |
584 | function fr(e) {
585 | e = e["replace"](/\r\n/g, "\n");
586 | for (var r = "", n = 0; n < 32; n++) {
587 | var o = e['charCodeAt'](n);
588 | _r["YcAap"](o, 128) ? r += String['fromCharCode'](o) : _r["SNmAe"](o, 127) && _r["IYqgI"](o, 2048) ? (r += String['fromCharCode'](192 | _r["bBpCr"](o, 6)),
589 | r += String["fromCharCode"](_r["yESQQ"](_r["DLqdJ"](o, 63), 128))) : (r += String["fromCharCode"](_r["yESQQ"](_r["ntwtB"](o, 12), 224)),console.log(r),
590 | r += String["fromCharCode"](_r["XhOLE"](_r["OUXTe"](_r["lPLEl"](o, 6), 63), 128)),
591 | r += String["fromCharCode"](_r["XhOLE"](_r["HiDFY"](o, 63), 128)))
592 | }
593 | // console.log(r)
594 | return r
595 | };
596 | 'bf9c0ac22fc2db6ce32add82e9a9a74e'
597 |
598 |
599 | function mr(e) {
600 | gr = "A4NjFqYu5wPHsO0XTdDgMa2r1ZQocVte9UJBvk6/7=yRnhISGKblCWi+LpfE8xzm3"
601 |
602 | var t = 287
603 | , r = '2|3|4|1|5|0'['split']("|");
604 | for (var o = 0; ; ) {
605 | switch (r[o++]) {
606 | case "0":
607 | return i;
608 | case "1":
609 | e = fr(e);
610 | continue;
611 | case "2":
612 | var i = "";
613 | continue;
614 | case "3":
615 | var a, s, u, l, c, p, d;
616 | continue;
617 | case "4":
618 | var f = 0;
619 | continue;
620 | case "5":
621 | for (; f < 32; )
622 | a = e["charCodeAt"](f++),
623 | s = e["charCodeAt"](f++),
624 | u = e["charCodeAt"](f++),
625 | l = _r["lPLEl"](a, 2),
626 | c = _r["TgopC"](_r['uytRs'](_r["CNQIo"](a, 3), 4), _r["NrAsb"](s, 4)),
627 | p = _r["TgopC"]((15 & s) << 2, _r["rniTJ"](u, 6)),
628 | d = _r["vZHUx"](u, 63),
629 | isNaN(s) ? p = d = 64 : isNaN(u) && (d = 64),
630 | i = _r["yAgFW"](_r["cvnJR"](_r["ezOMc"](i, gr["charAt"](l)), gr["charAt"](c)) + gr["charAt"](p), gr["charAt"](d));
631 | continue
632 | }
633 | break
634 | }
635 | };
636 | function get_x(t){
637 | i = get_i(t)
638 | // console.log(i)
639 | b = wordsToBytes(i)
640 | // console.log(b)
641 | re = bytesToHex(b)
642 | // console.log(re)
643 | result = mr(re)
644 | // console.log(result)
645 | return result
646 | }
647 | "https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id=62580023000000000102917a&cursor="
648 |
649 |
650 | // console.log(d)
--------------------------------------------------------------------------------