├── 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 | image 7 |
8 | 2.再次在图形界面窗口中点击需要爬取的类型网站。 9 |
10 | 3.具体操作指南。 11 | 12 | ## b站程序使用教程 13 | 14 | 1. 找到视频网址(点击b站上面你想要看的任何一个视频) 15 | 16 | image 17 | 18 | 2. F12键打开开发者工具,找到红色标识的一栏 19 | 20 | **第一步,找到network工具栏** 21 | 22 | image 23 | 24 | 25 | **第二步,找到可以输入aid号的白色框** 26 | 27 | image 28 | 29 | 30 | 3. 程序的oid号就是这里的aid号,每个视频都会分配一个号(叫做oid号) 31 | 32 | image 33 | 34 | 35 | 4. 输入aid号(oid) 36 | 37 | image 38 | 39 | 40 | 5. 输入oid 41 | image 42 | 43 | 44 | 6. 评论开始爬取 45 | 46 | ![image](https://github.com/suupermans/data-collectors/assets/99522395/36d31374-7967-48a0-a785-898fc4a23063) 47 | 48 | 49 | 7. 程序结束之后,会在这个程序的同一级目录下成csv文件 50 | 51 | image 52 | 53 | 54 | 8. 点击这个文件,就可以看到爬取的内容 55 | 56 | ![image](https://github.com/suupermans/data-collectors/assets/99522395/9cc50b18-a813-45b1-8027-37d0d356f5cb) 57 | 58 |

爬取结果图

59 | 60 | ![image](https://github.com/suupermans/data-collectors/assets/99522395/714dca6b-5f56-4345-b630-d1147c153e87) 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) --------------------------------------------------------------------------------