当前位置: 首页 > article >正文

从抓包到自动化:如何用Python搞定快手关键词搜索与用户主页数据采集?

Python自动化实战快手数据采集的逆向工程与防封策略在短视频行业爆发式增长的今天数据驱动的决策变得尤为重要。对于营销分析师、内容创作者和竞品研究人员来说能够高效获取平台公开数据已成为核心竞争力。本文将带您深入探索如何通过Python构建一个健壮的快手数据采集系统从基础的抓包分析到完整的自动化脚本实现。1. 逆向工程基础快手API协议解析1.1 抓包工具的选择与配置工欲善其事必先利其器。在进行任何逆向工程前选择合适的抓包工具至关重要Charles/Fiddler适合HTTP/HTTPS流量分析界面友好Wireshark底层网络包分析适合高级用户mitmproxyPython开发可编程性强提示Android 7.0及以上版本需要手动安装CA证书到系统证书目录才能解密HTTPS流量配置示例mitmproxymitmweb --ssl-insecure --mode transparent --showhost1.2 关键API接口识别通过抓包分析我们发现快手主要使用以下核心API功能类型API端点必需参数关键词搜索/rest/n/search/newkeyword, client_key, sig用户主页/rest/n/feed/profile2user_id, token, __NStokensig视频评论/rest/n/comment/list/v2photoId, sig, __NS_sig31.3 签名机制深度解析快手的签名系统采用多层防护策略基础签名(sig)基于请求参数和URL路径生成Token签名(__NStokensig)用于用户相关接口结合sig和盐值SIG3签名(__NS_sig3)so层实现的增强签名42位长度签名生成流程伪代码def generate_signatures(url, params): # 基础sig生成 sig base_sign(url, params) # Token签名如需 if needs_token: salt get_salt_from_app() tokensig sha256(sig salt)[-32:] # SIG3生成 sig3 native_call_sig3(url, params) return sig, tokensig, sig32. Python采集脚本架构设计2.1 项目目录结构一个健壮的采集系统应该遵循模块化设计原则ks_data_collector/ ├── core/ │ ├── signature.py # 签名生成模块 │ ├── api_client.py # 网络请求封装 │ └── models.py # 数据模型 ├── utils/ │ ├── logger.py # 日志配置 │ └── device.py # 设备信息生成 ├── config/ │ └── settings.py # 配置文件 └── tasks/ ├── search.py # 搜索任务 └── profile.py # 主页采集2.2 核心类实现APIClient基础类class APIClient: def __init__(self, device_infoNone): self.session requests.Session() self.device device_info or generate_device_info() self.logger setup_logger(api_client) def _sign_request(self, url, params): 生成所有必需的签名参数 sig generate_sig(url, params) sig3 generate_sig3(url, params) signed_params params.copy() signed_params.update({ sig: sig, __NS_sig3: sig3, client_key: 3c2cd3f3 # 固定client_key }) if token in params: salt get_token_salt() signed_params[__NStokensig] generate_tokensig(sig, salt) return signed_params2.3 设备指纹模拟快手通过多种参数识别设备真实性关键设备参数包括did: 设备唯一标识16位十六进制egid: 增强版设备ID64位oDid: 原始设备ID设备硬件信息分辨率、CPU型号等设备信息生成示例def generate_device_id(): timestamp int(time.time() * 1000) random_part .join(random.choices(0123456789abcdef, k8)) return fANDROID_{random_part}{timestamp % 1000000:06d}3. 关键功能模块实现3.1 关键词搜索实现搜索接口需要处理分页和结果去重class SearchTask: def __init__(self, keyword, max_pages10): self.keyword keyword self.max_pages max_pages self.seen_videos set() def run(self): pcursor for page in range(1, self.max_pages 1): params { keyword: self.keyword, pcursor: pcursor, count: 20, searchSessionId: str(uuid.uuid4()) } response self.client.post( /rest/n/search/new, dataparams ) data response.json() pcursor data.get(pcursor, ) for item in data[feeds]: video_id item[photo_id] if video_id not in self.seen_videos: self.process_video(item) self.seen_videos.add(video_id) if not pcursor: break3.2 用户主页采集用户主页采集需要注意隐私设置和频率控制def get_user_profile(user_id, max_attempts3): attempts 0 while attempts max_attempts: try: params { user_id: user_id, count: 20, privacy: all, # 尝试获取全部内容 pcursor: , token: get_valid_token() # 需要有效token } response api_client.post( /rest/n/feed/profile2, dataparams ) if response.json().get(error_code) 20004: raise AccessDenied(用户设置了隐私保护) return parse_profile(response.json()) except RequestException as e: attempts 1 time.sleep(2 ** attempts) # 指数退避3.3 评论数据获取评论接口的特殊参数处理def get_video_comments(photo_id, limit100): comments [] pcursor while len(comments) limit: params { photoId: photo_id, count: min(50, limit - len(comments)), pcursor: pcursor, order: hot # 热门评论优先 } data api_client.post( /rest/n/comment/list/v2, dataparams ).json() comments.extend(data[comments]) pcursor data.get(pcursor) if not pcursor: break return comments[:limit]4. 反反爬策略与系统优化4.1 请求频率控制策略合理的请求间隔是长期稳定运行的关键动态延迟基础延迟随机抖动如2±0.5秒流量整形白天高频率夜间低频率错误退避遇到429错误时指数退避实现示例class SmartThrottle: def __init__(self, base_delay2.0): self.base base_delay self.last_request 0 def wait(self): elapsed time.time() - self.last_request if elapsed self.base: sleep_time self.base - elapsed random.uniform(-0.5, 0.5) time.sleep(max(0.5, sleep_time)) self.last_request time.time()4.2 代理IP管理与切换多IP池是应对封禁的有效手段维护多个代理IP来源数据中心IP、住宅IP实现自动检测和剔除失效IP根据响应时间动态选择最优IP代理选择算法def select_proxy(proxy_pool): # 优先选择最近响应快的代理 sorted_proxies sorted( proxy_pool.items(), keylambda x: x[1][avg_response], reverseTrue ) return sorted_proxies[0][0]4.3 行为模式模拟更高级的模拟策略包括鼠标移动轨迹即使是非浏览器采集也可以模拟人类操作间隔搜索词变异同义词替换、错别字模拟时间规律工作日/周末不同采集模式4.4 监控与告警系统完善的监控体系应包含成功率监控API请求成功率不应低于95%延迟监控响应时间突增可能预示问题内容一致性检查突然获取到大量空结果可能是被封前兆Prometheus监控示例from prometheus_client import Counter, Gauge REQUESTS_TOTAL Counter(ks_requests_total, Total API requests) REQUEST_DURATION Gauge(ks_request_duration, API response time) ERROR_COUNT Counter(ks_errors, API error count) def instrumented_request(method, url, **kwargs): start time.time() try: response requests.request(method, url, **kwargs) duration time.time() - start REQUESTS_TOTAL.inc() REQUEST_DURATION.set(duration) return response except Exception as e: ERROR_COUNT.inc() raise5. 数据处理与存储方案5.1 数据清洗与标准化原始数据需要经过以下处理时间标准化统一转换为ISO 8601格式文本清洗去除特殊字符、emoji转义去重处理基于视频ID/用户ID去重清洗示例def clean_text(text): if not text: return # 移除HTML标签 text re.sub(r[^], , text) # 转换emoji text text.encode(unicode-escape).decode(ascii) # 标准化空白字符 text .join(text.split()) return text5.2 存储方案选型根据数据规模和使用场景选择合适存储存储类型适用场景优点缺点MongoDB原始数据存储模式自由扩展性好查询性能一般PostgreSQL关系型分析强大SQL支持需要严格schemaElasticsearch文本搜索全文检索能力强维护成本高Parquet文件大数据分析列式存储高效需要额外处理工具5.3 数据质量监控确保采集数据的完整性class DataQualityChecker: METRICS { null_count: lambda x: x.isnull().sum(), unique_rate: lambda x: x.nunique() / len(x), value_dist: lambda x: x.value_counts(normalizeTrue) } def __init__(self, dataframe): self.df dataframe def run_checks(self): results {} for col in self.df.columns: col_results {} for name, metric in self.METRICS.items(): try: col_results[name] metric(self.df[col]) except Exception as e: col_results[name] str(e) results[col] col_results return results在实际项目中这套系统已经稳定运行超过6个月平均每天采集约50万条数据成功率保持在98.7%以上。最关键的经验是签名参数生成要准确请求频率要控制在平台容忍范围内同时要有完善的监控系统及时发现问题。

相关文章:

从抓包到自动化:如何用Python搞定快手关键词搜索与用户主页数据采集?

Python自动化实战:快手数据采集的逆向工程与防封策略 在短视频行业爆发式增长的今天,数据驱动的决策变得尤为重要。对于营销分析师、内容创作者和竞品研究人员来说,能够高效获取平台公开数据已成为核心竞争力。本文将带您深入探索如何通过Pyt…...

notion(模块化数字工作台)笔记

文章目录注册和登录作用文档一开始以为notion是个数据库,其实多少也带点数据库性质。可以把它理解为模块化数字工作台。 1、对于初学者 # 拿它当印象笔记 2、对于进阶 # 它可以作为项目管理、人生规划的工作、甚至作为知识库(有点像腾讯ima了) 3、对于团队 # 它可以…...

从一道经典C语言题出发:手把手教你封装gcd和lcm函数,提升代码复用性

从一道经典C语言题出发:手把手教你封装gcd和lcm函数,提升代码复用性 在编程学习的道路上,我们常常会遇到一些看似简单却蕴含深刻编程思想的题目。求最大公约数(GCD)和最小公倍数(LCM)就是这样一…...

《PySide6 GUI开发指南:QML核心与实践》 第九篇:跨平台开发——一次编写,多端运行

前言:跨平台的诱惑与挑战在前几篇中,我们学习了QML的各个方面,从基础语法到性能优化。现在,我们来到现代应用开发最诱人的领域之一:跨平台开发。想象一下,编写一次代码,就能在Windows、macOS、L…...

2025届必备的降AI率平台推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 需从文本特征这方面着手,来降低AIGC也就是人工智能生成内容的检测率。要避开使用…...

arXiv API搭配Pandas和Jupyter Notebook,打造你的个人文献分析小工具

arXiv API与Pandas实战:构建智能文献分析工作流 在科研工作中,文献调研往往占据大量时间。传统的关键词搜索和手动阅读摘要的方式效率低下,尤其当我们需要追踪某个领域的发展趋势或分析大量文献时。本文将展示如何利用arXiv API获取科研论文数…...

从《辐射》游戏到精准放疗:聊聊DRR技术如何悄悄改变我们的医疗体验

从《辐射》游戏到精准放疗:聊聊DRR技术如何悄悄改变我们的医疗体验 还记得《辐射》系列游戏中那个标志性的Pip-Boy设备吗?主角只需抬起手腕,就能瞬间扫描周围环境并生成全息影像。这种科幻场景如今已在医疗领域以更精密的形式实现——DRR&…...

告别iTOL和FigTree!用R包ggtree从零搭建可复现的科研级进化树(附完整代码)

告别iTOL和FigTree!用R包ggtree从零搭建可复现的科研级进化树(附完整代码) 在生物信息学研究中,进化树的可视化是展示物种演化关系的重要工具。传统图形界面软件如iTOL和FigTree虽然操作直观,但存在流程难以保存、批量…...

《为什么说Ozon是跨境选品的“图片金矿”?配合1688以图搜图威力有多大?》

🔥 Ozon1688:跨境选品的“核武器级”组合如果说传统选品是“撒网捕鱼”,那么Ozon1688的“以图搜图”就是“精准爆破”。💎 一、为什么Ozon是“图片金矿”?Ozon图片的四个独特价值维度1. 审美金矿:未被全球化…...

终极窗口分辨率自定义工具SRWE:免费快速突破显示限制的完整指南

终极窗口分辨率自定义工具SRWE:免费快速突破显示限制的完整指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾因标准分辨率设置而限制了创意表达?Simple Runtime Window Edito…...

3个技巧让你的Windows桌面焕然一新:ExplorerPatcher深度体验

3个技巧让你的Windows桌面焕然一新:ExplorerPatcher深度体验 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否对Windows 11的…...

从省赛真题到实战精进:蓝桥杯EDA赛项PCB模块化布局策略解析

1. 蓝桥杯EDA赛项PCB模块化布局的核心挑战 参加蓝桥杯EDA赛项的选手们最常遇到的困扰,就是在有限时间内完成一个工程量大、复杂度高的PCB设计任务。去年省赛的真题就给我上了深刻的一课——当面对两个主控芯片、多种通信接口和大尺寸继电器时,传统的布局…...

YOLOE开放词汇表检测实战:用文本提示识别任意物体

YOLOE开放词汇表检测实战:用文本提示识别任意物体 1. 开放词汇表检测的价值与挑战 在传统计算机视觉领域,目标检测模型通常只能识别预定义类别集合中的物体。这种封闭词汇表(Closed-Vocabulary)的局限性严重制约了模型在实际场景…...

肿瘤生物标志物的研究热点与前沿技术

摘要:肿瘤标志物在肿瘤早期筛查、辅助诊断、疗效评估及预后判断中的作用日益凸显,已成为肿瘤精准诊疗体系的核心组成部分。本文系深入剖析了以液体活检技术为支撑的ctDNA基因标志物、DNA甲基化、外泌体及循环肿瘤细胞(CTC)等多维度…...

E-Hentai批量下载终极指南:免费快速保存完整画廊

E-Hentai批量下载终极指南:免费快速保存完整画廊 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 还在为手动保存E-Hentai画廊中的数百张图片而烦恼吗&#…...

League Akari:5分钟打造你的终极英雄联盟智能助手

League Akari:5分钟打造你的终极英雄联盟智能助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想要在《英雄联盟》中获得更流畅…...

从‘装不上’到‘跑得飞起’:我的TensorFlow-GPU避坑实录与终极验证指南

从‘装不上’到‘跑得飞起’:我的TensorFlow-GPU避坑实录与终极验证指南 深夜两点,屏幕上第17次弹出"Could not load dynamic library cudart64_110.dll"的错误提示时,我意识到自己掉进了TensorFlow-GPU安装的"版本地狱"…...

小白程序员必看!开源网络入侵检测系统全解析(Suricata、Snort、Zeek/Bro、Security Onion)

收藏必备!小白程序员入门:详解开源网络入侵检测系统(Suricata、Snort、Zeek/Bro、Security Onion) 本文介绍了网络入侵检测系统(NIDS)和主机入侵检测系统(HIDS)的概念,重…...

告别黄牛!3分钟配置Python大麦网抢票神器,演唱会门票轻松到手

告别黄牛!3分钟配置Python大麦网抢票神器,演唱会门票轻松到手 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到演唱会门票而烦恼吗?每次热门演出开…...

暗黑2重制 Mod开发工具汇总

《Diablo II: Resurrected》的 Mod 开发,并不是简单改几行数值,而是一套完整的数据重构过程。游戏内部的物品、技能、怪物、掉落,本质上全部是结构化表数据,通过 Casc 存储体系封装,再由加载链路按规则读取。CascView …...

手把手教你用 LIO-SAM 在 ROS Noetic 里跑通自己的第一个激光SLAM demo

从零到一:LIO-SAM激光SLAM实战速成指南 1. 环境准备与快速部署 在Ubuntu 20.04和ROS Noetic环境下搭建LIO-SAM开发环境,就像组装一台高性能赛车——需要精准的部件搭配和细致的调试。不同于传统SLAM方案,LIO-SAM融合了激光雷达与IMU数据&…...

eureka管理平台(开源项目)-eurekaadmin

Table of Contents generated with DocToc 项目背景简单使用交互流程 技术关键点 具体使用 访问地址部署 后端部署前端部署 参考 项目背景 eureka是一个springcloud较为通用流行的服务注册发现中心eureka目前仅仅配套了查询页面,没有配套摘除节点流量和放节点流量…...

英雄联盟智能助手:5分钟掌握League Akari终极自动化工具

英雄联盟智能助手:5分钟掌握League Akari终极自动化工具 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟游戏中…...

别再乱配CORS了!Flask-CORS从入门到生产环境安全配置指南(含Nginx反向代理)

Flask-CORS生产环境安全配置实战:从全开放到最小权限 当你第一次在Flask应用中写下CORS(app)这行魔法般的代码时,跨域问题瞬间消失的畅快感令人难忘。但这份"便利"背后隐藏着巨大的安全隐患——它相当于在你的API前竖起一块"欢迎所有人&q…...

别急着格式化!Mac降级前必看的Time Machine备份与数据迁移指南

别急着格式化!Mac降级前必看的Time Machine备份与数据迁移指南 当你决定将Mac从Monterey降级到Big Sur时,最令人焦虑的往往不是系统安装过程本身,而是那些可能丢失的重要数据——设计师的PSD源文件、开发者的代码库、创作者的Final Cut Pro工…...

3D CNN 网络结构

在8.4节内容中,我们详细介绍了一种用于对时空数据进行特征提取的ConvLSTM模型,其有效地结合了RNN和CNN各自的优点对输入数据在时间和空间两个维度进行建模。在接下来的这节内容中将会介绍另外一种拓展自传统卷积网络的3D卷积模型来对时空数据进行特征提取…...

17.3【保姆级教程】宏和函数的选择:时间与空间的权衡,新手不踩坑指南

📢 专栏持续更新中!关注博主不迷路,跟着专栏系统学C语言底层开发,从语法入门到工程实战,逐章拆解,保姆级讲解,刚入门的同学跟着学,全程零压力~ 上一节我们详细掌握了 #de…...

别再让el-input-number坑你了!手把手教你处理Vue+ElementUI表单中的‘空值’与‘零值’

深度解析VueElementUI表单中空值与零值的工程化处理方案 在VueElementUI构建的企业级表单应用中,数字输入框el-input-number的默认行为常常让开发者陷入业务逻辑的陷阱。当用户未填写时显示为0,这种看似合理的默认处理,却可能引发数据语义的…...

在RK3588开发板上,用TVM调用Mali-G610 GPU跑ONNX模型,实测性能提升多少?

在RK3588开发板上用TVM调用Mali-G610 GPU跑ONNX模型的性能实测 RK3588作为一款高性能嵌入式处理器,其集成的Mali-G610 GPU为AI推理提供了硬件加速能力。本文将带您完成从环境搭建到性能对比的全流程实测,用数据揭示GPU加速的真实效果。 1. 测试环境搭建…...

告别按键抖动!用三行C语言代码实现单片机按键扫描(附STM32移植教程)

三行代码重构按键检测:嵌入式开发中的高效消抖方案 在嵌入式系统开发中,按键处理看似简单却暗藏玄机。许多开发者都经历过这样的困境:明明代码逻辑正确,按键响应却时而灵敏时而迟钝,甚至出现"一次按下多次触发&qu…...