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

Python自动化抓取Keep运动数据:从入门到实战

1. 为什么需要自动化抓取Keep运动数据作为一个健身爱好者我每天都会用Keep记录自己的运动数据。但时间久了发现一个问题这些宝贵的数据都散落在App里想做个长期分析特别麻烦。每次都要手动截图、复制粘贴效率低不说还容易出错。后来我发现用Python写个自动化脚本就能解决这个问题。通过爬虫技术我们可以定期把Keep里的运动数据自动抓取下来存到本地数据库或Excel里。这样不仅能避免手动操作的繁琐还能对数据进行更深入的分析。举个例子我有个朋友坚持跑步半年但体重一直没变化。后来我们把他的Keep跑步数据导出分析发现平均配速太稳定身体已经适应了这个强度。调整训练计划后效果立竿见影。这就是数据的力量。2. 准备工作环境搭建与工具选择2.1 Python环境配置首先确保你安装了Python 3.6或以上版本。我推荐使用Anaconda来管理Python环境它能很好地处理各种依赖关系。安装完成后我们需要几个关键库pip install requests beautifulsoup4 pandas seleniumrequests用于发送HTTP请求beautifulsoup4解析HTML内容pandas处理和分析数据selenium模拟浏览器操作后面会讲到它的用途2.2 开发者工具的使用现代浏览器都内置了开发者工具按F12打开这是我们分析网页结构的利器。以Chrome为例打开Keep网页版并登录按F12打开开发者工具切换到Network选项卡刷新页面观察加载的资源特别注意XHR类型的请求这些往往包含了我们需要的数据接口。找到返回运动数据的接口后右键选择Copy as cURL可以获取请求的完整信息。3. 登录Keep的两种方法3.1 直接使用账号密码登录Keep的登录接口做了加密处理直接模拟登录比较复杂。我测试发现最稳定的方式是使用Selenium模拟浏览器操作from selenium import webdriver from selenium.webdriver.common.by import By import time driver webdriver.Chrome() driver.get(https://www.gotokeep.com/login) # 输入账号密码 driver.find_element(By.NAME, phoneNumber).send_keys(你的手机号) driver.find_element(By.NAME, password).send_keys(你的密码) # 点击登录按钮 driver.find_element(By.CSS_SELECTOR, .login-btn).click() # 等待登录完成 time.sleep(5) # 获取cookies cookies driver.get_cookies() driver.quit()这种方法虽然慢但成功率高。获取到的cookies可以用于后续的请求。3.2 使用移动端API经过抓包分析Keep的移动端API相对简单。我们可以直接调用手机登录接口import requests login_url https://api.gotokeep.com/v1.1/users/login headers { User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00), Content-Type: application/json } data { phoneNumber: 你的手机号, password: 你的密码 } response requests.post(login_url, jsondata, headersheaders) auth_token response.json()[data][token]这种方式更快但需要注意模拟正确的User-Agent和请求头。4. 获取运动数据的具体实现4.1 解析运动列表登录成功后我们可以获取运动记录列表def get_workout_list(token, page1, limit20): url fhttps://api.gotokeep.com/pd/v3/stats/record?page{page}limit{limit} headers { Authorization: fBearer {token}, User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00) } response requests.get(url, headersheaders) return response.json()[data][records]这个接口返回的是JSON格式的数据包含每次运动的基本信息如运动类型、时长、消耗卡路里等。4.2 获取详细运动数据有了运动记录ID后我们可以获取更详细的数据def get_workout_detail(token, record_id): url fhttps://api.gotokeep.com/pd/v3/stats/detail/{record_id} headers { Authorization: fBearer {token}, User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00) } response requests.get(url, headersheaders) return response.json()[data]对于跑步记录这个接口会返回配速、心率、轨迹等详细信息。我建议将这些数据存储为结构化格式方便后续分析。5. 数据存储与分析5.1 存储到CSV文件使用pandas可以方便地将数据保存为CSVimport pandas as pd def save_to_csv(data, filenameworkout_data.csv): df pd.DataFrame(data) df.to_csv(filename, indexFalse, encodingutf_8_sig)5.2 存储到数据库对于长期积累的数据建议使用数据库存储。这里以SQLite为例import sqlite3 def init_db(): conn sqlite3.connect(keep_data.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS workouts (id TEXT PRIMARY KEY, type TEXT, duration INTEGER, calories REAL, distance REAL, start_time TEXT)) conn.commit() conn.close() def save_to_db(data): conn sqlite3.connect(keep_data.db) c conn.cursor() for item in data: c.execute(INSERT OR IGNORE INTO workouts VALUES (?,?,?,?,?,?), (item[id], item[type], item[duration], item[calories], item.get(distance, 0), item[startTime])) conn.commit() conn.close()5.3 数据分析示例有了数据后我们可以进行各种分析。比如计算每周跑步距离def analyze_running_data(): conn sqlite3.connect(keep_data.db) df pd.read_sql(SELECT * FROM workouts WHERE typerunning, conn) df[start_time] pd.to_datetime(df[start_time]) df[week] df[start_time].dt.strftime(%Y-%U) weekly_stats df.groupby(week)[distance].sum() print(weekly_stats)这样的分析可以帮助我们了解训练效果及时调整计划。6. 常见问题与解决方案6.1 反爬虫机制Keep有一定的反爬虫措施我遇到过的主要问题有请求频率过高被封IP - 解决方法添加适当的延时如3-5秒需要验证码 - 解决方法使用Selenium模拟人工操作接口变更 - 解决方法定期检查接口是否有效6.2 数据加密部分运动数据如GPS轨迹是加密的。经过分析Keep使用的是Base64编码的Gzip压缩数据。解密方法如下import base64 import gzip import json def decode_encrypted_data(encrypted_str): compressed_data base64.b64decode(encrypted_str) json_str gzip.decompress(compressed_data).decode(utf-8) return json.loads(json_str)6.3 数据不完整有时接口返回的数据可能缺少某些字段。我的经验是检查是否有其他接口能提供更完整的数据设置默认值避免程序出错记录数据缺失情况便于后续分析7. 完整代码示例下面是一个完整的示例实现了从登录到数据获取的全流程import requests import pandas as pd import time import sqlite3 class KeepSpider: def __init__(self): self.session requests.Session() self.token None def login(self, phone, password): url https://api.gotokeep.com/v1.1/users/login headers { User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00), Content-Type: application/json } data { phoneNumber: phone, password: password } response self.session.post(url, jsondata, headersheaders) self.token response.json()[data][token] return self.token is not None def get_workouts(self, page1, limit20): url fhttps://api.gotokeep.com/pd/v3/stats/record?page{page}limit{limit} headers { Authorization: fBearer {self.token}, User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00) } response self.session.get(url, headersheaders) return response.json()[data][records] def get_workout_detail(self, record_id): url fhttps://api.gotokeep.com/pd/v3/stats/detail/{record_id} headers { Authorization: fBearer {self.token}, User-Agent: Keep/5.25.0 (iPhone; iOS 14.4; Scale/3.00) } response self.session.get(url, headersheaders) return response.json()[data] def save_to_csv(self, data, filename): df pd.DataFrame(data) df.to_csv(filename, indexFalse, encodingutf_8_sig) # 使用示例 if __name__ __main__: spider KeepSpider() if spider.login(你的手机号, 你的密码): workouts spider.get_workouts() workout_details [] for workout in workouts[:10]: # 只获取前10条避免频繁请求 detail spider.get_workout_detail(workout[id]) workout_details.append(detail) time.sleep(3) # 适当延时 spider.save_to_csv(workout_details, my_workouts.csv)8. 实际应用建议经过几个月的实践我总结出一些实用建议定时运行使用Windows任务计划或Linux的cron设置定时任务建议每周运行一次数据备份定期备份数据库避免数据丢失异常处理增加重试机制应对网络波动可视化展示用matplotlib或Tableau创建仪表盘直观展示训练成果我自己的脚本已经稳定运行半年多积累了丰富的运动数据。通过这些数据我不仅能看到自己的进步还能发现训练中的问题。比如有段时间我的跑步配速波动很大分析后发现是因为那段时间睡眠质量差。这种洞察是单纯靠感觉无法获得的。最后提醒一点自动化抓取数据要遵守Keep的使用条款不要过度请求影响服务器性能。建议控制请求频率最好在非高峰时段运行脚本。

相关文章:

Python自动化抓取Keep运动数据:从入门到实战

1. 为什么需要自动化抓取Keep运动数据 作为一个健身爱好者,我每天都会用Keep记录自己的运动数据。但时间久了发现一个问题:这些宝贵的数据都散落在App里,想做个长期分析特别麻烦。每次都要手动截图、复制粘贴,效率低不说&#xff…...

解密 transforms.Normalize():PyTorch 图像标准化的数学原理与实战技巧

1. transforms.Normalize()的数学本质 当你第一次看到PyTorch代码里出现transforms.Normalize(mean[0.5, 0.5, 0.5], std[0.5, 0.5, 0.5])时,可能会疑惑这行简单的代码背后到底发生了什么。让我们拆解这个看似简单的操作背后的数学原理。 标准化公式的完整推导过程是…...

[最新战况]融入止盈止损模块!收益曲线更平稳!ETF三因子轮动实盘跟踪!股票量化分析工具QTYX-V3.4.5

前言我们的股票量化系统QTYX在实战中不断迭代升级!!!分享QTYX系统目的是提供给大家一个搭建量化系统的模版,帮助大家搭建属于自己的系统。因此我们提供源码,可以根据自己的风格二次开发。 关于QTYX的使用攻略可以查看链接:QTYX使用攻略QTYX一…...

告别云端排队:6GB显存笔记本实战FramePack,解锁个人图生视频创作自由

1. 为什么你需要FramePack? 每次看到别人用AI生成酷炫的视频,你是不是也心痒痒?但打开云端服务一看:排队2小时,生成5分钟,还要担心隐私泄露。更别提那些按秒计费的专业平台,钱包真的伤不起。这就…...

Pixel Couplet Gen部署案例:高校计算机系毕业设计展示平台

Pixel Couplet Gen部署案例:高校计算机系毕业设计展示平台 1. 项目背景与价值 在高校计算机专业的毕业设计中,如何将前沿AI技术与创意设计相结合,打造出既有技术深度又具备视觉冲击力的作品,一直是师生们关注的焦点。Pixel Coup…...

YOLO12实战教程:在RTX 4090 D上实现120FPS实时检测性能调优

YOLO12实战教程:在RTX 4090 D上实现120FPS实时检测性能调优 1. 引言:为什么选择YOLO12? 如果你正在寻找一个既能保持实时检测速度,又能提供顶尖精度的目标检测模型,YOLO12绝对是2025年最值得关注的选择。这个由国际学…...

LangChain、LangGraph、LlamaIndex怎么选?别纠结了,这才是Agent开发的核心!

文章指出,在Agent开发中,框架的选择并非关键,因为框架能帮你的远比你想象的少,而你需要自己解决的远比你想象的多。建议选择GitHub star最多的框架以利用AI辅助开发的优势。文章深入剖析了Agent开发的核心——ReAct模式&#xff0…...

小红书面试官怒批:“自己骂自己?你连Agent反思机制都没搞懂!” 高频真题拿分秘籍在此!

本文深入解析了Agent的反思机制,阐述了其为何重要(提升LLM输出质量,避免初版缺陷)及实现方式(生成->评估->改进的核心循环,通过特定Prompt设计)。文章对比了步骤级与任务级反思的优劣及适…...

Qt中waitForReadyRead与waitForBytesWritten的陷阱与实战优化

1. 深入理解Qt阻塞式IO的工作原理 在Qt网络编程中,waitForReadyRead()和waitForBytesWritten()这两个函数就像两个尽职的门卫,它们会一直守在数据通道的两端,直到有数据到达或超时。但很多开发者在使用时常常忽略它们的内部机制,这…...

OFA-COCO蒸馏模型多场景落地:智能相册自动打标、新闻配图语义摘要、AR内容生成

OFA-COCO蒸馏模型多场景落地:智能相册自动打标、新闻配图语义摘要、AR内容生成 1. 项目概述 今天给大家介绍一个特别实用的AI工具——OFA图像描述系统。这个系统能够看懂图片内容,并用自然语言描述出来,就像给图片配上了智能解说员。 简单…...

利用Chord - Ink Shadow自动化批改作业:教育领域的AI助手实践

利用Chord - Ink & Shadow自动化批改作业:教育领域的AI助手实践 作为一名在教育一线摸爬滚打了多年的老师,我深知批改作业的“痛”。夜深人静,面对堆积如山的作文本,既要逐字逐句检查语法,又要思考如何给出有建设…...

Graphormer惊艳效果:小分子药物ADMET属性预测准确率超传统模型12%

Graphormer惊艳效果:小分子药物ADMET属性预测准确率超传统模型12% 1. 突破性的分子属性预测模型 Graphormer正在彻底改变药物发现和材料科学领域。这个基于纯Transformer架构的图神经网络,专为分子图(原子-键结构)的全局结构建模…...

从CANopen到EtherCAT:搞懂PDO映射,这一篇对比就够了(附DS402实战差异)

从CANopen到EtherCAT:PDO映射机制深度解析与实战迁移指南 在工业自动化领域,现场总线技术经历了从CANopen到EtherCAT的演进过程。对于已经熟悉CANopen协议的工程师而言,转向EtherCAT时最常遇到的困惑之一就是PDO(过程数据对象&…...

用Matlab App Designer给杨氏双缝干涉实验做个交互式GUI(附完整源码)

用Matlab App Designer打造杨氏双缝干涉实验交互式GUI 在光学实验教学中,杨氏双缝干涉是理解波动光学基础的重要实验。传统实验室操作需要精密调节光路、严格控制环境条件,而Matlab仿真可以突破这些限制。本文将带你从零开始,使用App Designe…...

卸船机市场调研:2026 - 2032年复合增长率(CAGR)为2.7%

据恒州诚思调研统计,2025年全球卸船机收入规模约达49.94亿元,预计到2032年,这一规模将接近60.2亿元,2026 - 2032年复合增长率(CAGR)为2.7%。在全球贸易不断发展、港口货物吞吐量持续增加的背景下&#xff0…...

从形式逻辑到认知几何:基于RAE引擎的逻辑律强制与可信AI构建方法研究(修订稿)

从形式逻辑到认知几何:基于RAE引擎的逻辑律强制与可信AI构建方法研究(修订稿) From Formal Logic to Cognitive Geometry: A Study on Logical Law Enforcement and Trustworthy AI via RAE Engine作者:方见华 单位:世…...

港科大等联合发布让实验室变身“智能侦探“的贝叶斯优化教程

想象一下,如果有一位超级聪明的侦探助手,能够记住你做过的每一次实验、分析每一个结果的规律,然后准确告诉你下一步最应该尝试什么——这听起来像科幻小说,但实际上已经成为现实。来自香港科技大学(广州)、…...

《从形式逻辑到认知几何:基于RAE引擎的逻辑律强制与可信AI构建方法研究》

《从形式逻辑到认知几何:基于RAE引擎的逻辑律强制与可信AI构建方法研究》 From Formal Logic to Cognitive Geometry: A Study on Logical Law Enforcement and Trustworthy AI via RAE Engine作者:方见华 单位:世毫九实验室 摘要 (Abstract)…...

MedGemma 1.5惊艳案例:对‘PD-L1表达阳性’检测报告的机制级解读

MedGemma 1.5惊艳案例:对‘PD-L1表达阳性’检测报告的机制级解读 1. 引言:当AI遇见专业医疗报告解读 想象一下,你拿到一份病理检测报告,上面写着"PD-L1表达阳性(TPS≥50%)"。这串专业术语背后到…...

中科院与京东联手突破AI训练难题:让机器像老师一样自我反思学习

这项由中国科学院信息工程研究所联合中科院网络空间安全学院和京东公司共同完成的研究于2026年发表,论文编号arXiv:2604.03128v1,为人工智能领域的自我学习训练方法带来了重要突破。在人工智能快速发展的今天,如何让机器更聪明地学习始终是科…...

MCP 已死

MCP,可能并没有你想的那么香。所谓 Model Context Protocol,也就是 MCP,本质上是一套开源标准。它的目标很明确:让 AI 模型能够更顺滑地接入外部数据源、工具,以及各类软件系统。你也可以把它理解成一种“AI 时代的即插…...

CTF解题实战:手把手教你用JSFuck在线解码器搞定LitCTF 2023那道‘天书’题

CTF解题实战:从零破解JSFuck编码的完整指南 第一次在CTF比赛中遇到JSFuck编码时,那串由[]!()组成的"天书"让我完全摸不着头脑。这种极简主义的JavaScript编码方式,能将完整代码压缩成仅用6个字符表达的密文。本文将带你完整经历从识…...

CRaxsRat v7.4 实战部署:从零搭建远程管理测试环境

1. 环境准备:搭建安全的测试沙盒 在开始部署CRaxsRat v7.4之前,我们需要先建立一个安全的实验环境。我强烈建议使用虚拟机来隔离测试环境,这样既能避免影响主机系统,又能模拟真实的网络场景。我自己常用的是VirtualBox&#xff0…...

ArcGIS用户必看:用CC工具箱一键搞定面要素四至点提取与坐标写入

ArcGIS高效数据处理:CC工具箱面要素四至点提取实战指南 在国土调查、城乡规划、自然资源管理等GIS应用场景中,面状要素的边界坐标提取是基础却频繁的操作。传统手动计算不仅耗时费力,还容易因人为因素导致数据偏差。今天要分享的这套工作流&a…...

别再对着空白界面发呆了!手把手教你用GNURadio Companion(GRC)画出第一个信号流图

别再对着空白界面发呆了!手把手教你用GNURadio Companion(GRC)画出第一个信号流图 第一次打开GNURadio Companion(GRC)时,那个空白的画布和密密麻麻的模块列表确实容易让人望而生畏。作为一个过来人&#x…...

乙巳马年春联生成终端完整指南:春节礼赠场景高清PNG/AI格式导出

乙巳马年春联生成终端完整指南:春节礼赠场景高清PNG/AI格式导出 1. 引言:当传统年俗遇见AI艺术 春节贴春联,是刻在我们文化基因里的仪式感。但每年都去市场买印刷品,总觉得少了点“专属”的味道。自己写?书法功底不够…...

PDF-Parser-1.0功能体验:布局分析+表格识别,解析效果超预期

PDF-Parser-1.0功能体验:布局分析表格识别,解析效果超预期 1. 开篇:当PDF解析不再头疼 你有没有过这样的经历?拿到一份PDF文档,里面既有文字段落,又有复杂的表格,还有各种图表和公式。想把这些…...

写程序钥匙排扣定位切割,整整齐齐,输出:家用钥匙管理神器。

利用激光切割的高精度特性,通过代码计算出最优的钥匙孔排列矩阵,配合挂环设计,打造一款既美观又实用的“家庭钥匙管理神器”。以下是完整的项目交付文档:项目名称:KeyMatrix-Cutter (智能钥匙排扣定位切割系统)一、 实…...

【青少年CTF S1·2026 公益赛】时间胶囊留言板

解题步骤F12 查看源代码。 发现接口:在 JavaScript 代码中发现数据请求接口 get_content.php?id,同时在 HTML 列表中发现未解封的 flag 留言对应的 ID 为 content-2( id2)。 构造请求:后端并没有验证当前时间是否到达…...

3分钟自动化方案:B站视频转文字工具完全指南

3分钟自动化方案:B站视频转文字工具完全指南 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了记录B站视频中的精彩内容而反复暂停播…...