首页 > 编程语言 >使用Python爬虫抓取跑步和健身平台上的运动数据

使用Python爬虫抓取跑步和健身平台上的运动数据

时间:2024-12-03 14:05:03浏览次数:10  
标签:Strava 健身 Python 爬虫 抓取 API activity 数据

引言

随着科技的不断进步,越来越多的人开始关注健康生活,跑步和健身成为许多人日常生活的一部分。为了帮助人们更好地追踪自己的运动数据,许多健身平台如Nike Run Club、Strava、Keep等,提供了用户的跑步、健身记录,包括运动时长、距离、卡路里消耗、步频等详细数据。这些数据对运动爱好者来说非常有价值,通过分析这些数据可以优化训练计划,改进运动效果。

在本文中,我们将展示如何使用Python爬虫技术抓取跑步和健身平台上的用户运动数据。通过爬虫,我们可以自动化地收集大量运动数据,并通过分析来优化自己的健身计划或进行其他健康相关的研究。我们将介绍最新的爬虫技术、使用的工具库,并通过代码示例展示如何抓取、清洗和分析跑步和健身数据。

目录

引言

1. 为什么抓取跑步和健身数据?

1.1 健身数据的重要性

1.2 数据来源

2. Python爬虫技术

2.1 了解平台的API

3. 使用Strava API抓取运动数据

3.1 获取Strava API的访问权限

3.2 安装必要的库

3.3 示例代码:获取用户的运动数据

3.4 数据清洗与分析

3.5 使用Selenium抓取动态网页数据

4. 未来展望与总结


1. 为什么抓取跑步和健身数据?

1.1 健身数据的重要性

跑步和健身数据是分析运动效果、优化健身计划和评估运动成果的基础。具体来说,抓取这些数据有以下几个目的:

  • 监控运动进度:通过记录运动的各项数据,可以跟踪自己在运动过程中的进展,找出身体的强项和弱点。
  • 分析健身效果:运动数据可以帮助分析训练效果,帮助运动者发现自己训练中的优点与不足,合理调整训练强度。
  • 社交与激励:许多平台支持运动数据共享,帮助用户展示自己的运动成绩,也能通过与他人比较获得动力。
  • 数据建模和健康研究:收集大量运动数据可以用来进行健康研究、算法建模,甚至开发新的健身训练计划。

1.2 数据来源

市面上有许多运动平台,提供了丰富的跑步和健身数据。常见的数据源包括:

  • Nike Run Club:提供跑步记录、配速、时间、卡路里消耗等数据。
  • Strava:一个广受欢迎的运动平台,支持跑步、骑行等运动的详细记录。
  • Keep:一个国内知名的健身平台,提供包括跑步、力量训练、瑜伽等运动的记录。
  • Fitbit:一款智能健身手环,记录步数、心率、运动时长等数据。
  • Garmin:提供高精度的跑步、骑行数据,适合专业运动员。

我们将以StravaNike Run Club为例,演示如何抓取这些平台上的用户数据。

2. Python爬虫技术

爬虫是一个用于自动抓取网页数据的工具,基本流程包括:发送HTTP请求获取网页内容、解析网页提取数据、清洗数据并保存。常用的爬虫库有:

  • requests:用于发送HTTP请求获取网页内容。
  • BeautifulSoup:用于解析HTML网页,提取目标数据。
  • Selenium:用于抓取动态网页,模拟浏览器操作。
  • Scrapy:一个高效的爬虫框架,适合大规模数据抓取。
  • pandas:用于数据清洗和分析。
  • matplotlibseaborn:用于数据可视化。

2.1 了解平台的API

对于许多跑步和健身平台,如Strava和Nike Run Club,它们提供了API供开发者使用。通过API,用户可以安全地访问平台的数据,而不需要使用爬虫手动抓取网页内容。

Strava API为例,Strava允许开发者获取与跑步、骑行等活动相关的数据。使用Strava API,用户可以获得关于某一活动的详细信息,如时间、距离、心率、卡路里等。

为了使用Strava的API,你需要先进行认证,获取API的访问权限。

3. 使用Strava API抓取运动数据

3.1 获取Strava API的访问权限

首先,你需要在Strava开发者平台注册一个应用,获得Client IDClient SecretAccess Token。这些信息用于授权访问Strava的API。

3.2 安装必要的库

pip install requests pandas matplotlib

3.3 示例代码:获取用户的运动数据


import requests
import pandas as pd

# Strava API访问的基础URL
BASE_URL = "https://www.strava.com/api/v3"

# 用户的API访问Token
ACCESS_TOKEN = "your_access_token"  # 替换为你的Access Token

# 设置请求头部
headers = {
    "Authorization": f"Bearer {ACCESS_TOKEN}"
}

# 获取用户信息
def get_athlete_info():
    url = f"{BASE_URL}/athlete"
    response = requests.get(url, headers=headers)
    return response.json()

# 获取用户的活动数据
def get_activities(page=1, per_page=30):
    url = f"{BASE_URL}/athlete/activities"
    params = {
        "page": page,
        "per_page": per_page
    }
    response = requests.get(url, headers=headers, params=params)
    return response.json()

# 获取活动列表
activities = get_activities(page=1, per_page=5)  # 获取最新的5条活动记录

# 打印活动信息
for activity in activities:
    print(f"活动名称: {activity['name']}")
    print(f"活动类型: {activity['type']}")
    print(f"运动时长: {activity['moving_time']} 秒")
    print(f"距离: {activity['distance'] / 1000} 公里")
    print(f"卡路里消耗: {activity['kilojoules']} 千焦")
    print(f"日期: {activity['start_date']}")
    print('-' * 50)

# 将数据存入DataFrame进行分析
activity_data = [{
    'name': activity['name'],
    'type': activity['type'],
    'duration': activity['moving_time'],
    'distance': activity['distance'] / 1000,  # 单位:公里
    'calories': activity['kilojoules'] / 4.184,  # 单位:千卡
    'date': activity['start_date']
} for activity in activities]

df = pd.DataFrame(activity_data)
df.to_csv('strava_activities.csv', index=False)

# 打印数据统计信息
print(df.describe())

3.4 数据清洗与分析

我们可以对抓取到的数据进行清洗与分析,计算运动的总时长、总距离等。下面是一个简单的分析代码示例:


import pandas as pd

# 加载活动数据
df = pd.read_csv('strava_activities.csv')

# 将日期字段转换为日期类型
df['date'] = pd.to_datetime(df['date'])

# 计算总时长、总距离和总卡路里消耗
total_duration = df['duration'].sum() / 3600  # 转换为小时
total_distance = df['distance'].sum()
total_calories = df['calories'].sum()

print(f"总时长: {total_duration:.2f} 小时")
print(f"总距离: {total_distance:.2f} 公里")
print(f"总卡路里消耗: {total_calories:.2f} 千卡")

# 可视化运动时长和距离
import matplotlib.pyplot as plt

df['date'] = pd.to_datetime(df['date'])
plt.figure(figsize=(12, 6))
plt.plot(df['date'], df['distance'], label='Distance (km)', color='b')
plt.plot(df['date'], df['duration'] / 3600, label='Duration (hours)', color='r')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('运动时长与距离')
plt.legend()
plt.grid(True)
plt.show()

3.5 使用Selenium抓取动态网页数据

如果你想从不提供API的健身平台(如Nike Run Club)获取数据,或者从网页上抓取数据而没有公开的API时,可以使用Selenium来模拟用户操作,抓取动态加载的网页内容。

安装Selenium:

pip install selenium

使用Selenium来模拟登录和抓取动态内容的示例代码较为复杂,但其基本原理是通过自动化浏览器操作,模拟点击按钮、加载页面,并提取需要的数据。

4. 未来展望与总结

本文介绍了如何使用Python爬虫抓取跑步和健身平台上的运动数据。通过利用API抓取Strava和Nike Run Club的数据,我们能够轻松地获取运动数据并进行分析。在未来,我们可以根据抓取到的数据,设计更为复杂的健身分析模型,优化训练计划,甚至根据用户的运动数据自动生成个性化的健身方案。

标签:Strava,健身,Python,爬虫,抓取,API,activity,数据
From: https://blog.csdn.net/2201_76125261/article/details/144212067

相关文章

  • Python | 再次分享10个Excel自动化脚本,一定有你用得上的!
    在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。本文将再次分享10个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。1.Excel单元格批量填充import pandas as pd# 批量......
  • Python 奇怪的设定:为什么没有 main 函数?
    大家好!上次我们简单聊了Python为什么没有main函数,今天我们来更详细地探讨一下,并用代码进行佐证,帮助大家彻底理解Python的代码执行机制!1.Python代码如何执行?Python是一种解释型语言,这意味着代码不需要编译成机器码,而是由Python解释器逐行读取并执行。2. `__na......
  • 5.3、Python 匿名函数与 Lambda 表达式
    大家好,欢迎来到Python小白入门课程!今天我们要学习的是一个非常方便的工具:匿名函数和Lambda表达式。1.什么是匿名函数?在Python中,我们通常使用def关键字来定义一个函数,例如:defadd(x,y):"""这个函数计算两个数的和"""returnx+yresult=add(3,5)......
  • python毕设 宠物寄养管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容1.选题背景关于宠物寄养管理系统的研究,现有研究多侧重于宠物寄养业务的某一环节,如寄养家庭的选择或宠物健康监测等部分功能的实现。专门针对从用......
  • 在自家的代码生成工具中,增加对跨平台WxPython项目的前端代码生成,简直方便的不得了
    在经过长时间对WxPython的深入研究,并对其构建项目有深入的了解,以及完成对基础框架的完整改写后,终于在代码生成工具完全整合了基于Python跨平台方案项目的代码快速生成了,包括基于FastApi的后端WebAPI项目,以及前端的WxPython前端界面项目。本篇随笔主要介绍跨平台WxPython项目的......
  • python语言zip文件爬虫程序代码
    importrequestssession=requests.Session()设置请求头headers={“User-Agent”:“Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/131.0.0.0Safari/537.36Edg/131.0.0.0”,“Referer”:“https://m.ddooo.com/sof......
  • 最新毕设-Python-食堂就餐系统设计-82280(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    摘要本论文主要论述了如何基于Python开发一个食堂就餐系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述食堂就餐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。食堂就餐......
  • [1079] QGIS tools to python code
    Steps:OpentheProcessingToolboxinQGIS.Searchforthedesiredtool,suchastheRasterCalculator.Settheparametersfortheselectedtoolaccordingtoyourrequirments.ClickonAdvanced,andconvertthetooltoPythoncode.Examples:RasterCal......
  • Python_JWT_通常用于身份验证和信息交换
    JWT(JSONWebToken)是一种开放标准(RFC7519),用于在网络应用环境间安全地传输信息。JWT通常用于身份验证和信息交换Jwt由三部分组成,用dian(.)分割Header(头部)Payload(负载)Signature(签名)Header(头部):描述JWT的元数据,通常包括两个部分:typ:指定令牌的类型,通常是JWT。alg:指定......
  • Python 自动化办公的 10 大脚本
    1.批量重命名文件如果你需要对一堆文件进行重命名,比如给文件添加前缀或后缀,可以使用以下脚本:importos defbatch_rename_files(directory,prefix):  """批量重命名指定目录下的所有文件,添加前缀"""  forfilenameinos.listdir(directory):    new......