基于Python的健身数据分析工具的搭建流程day1

       基于Python的健身数据分析工具的搭建流程分数据挖掘、数据存储和数据分析三个步骤。本文主要介绍利用Python实现健身数据分析工具的数据挖掘部分。

第一步:加载库

       加载本文需要的库,如下代码所示。若库未安装,请按照python如何安装各种库(保姆级教程)_python安装库-CSDN博客https://blog.csdn.net/aobulaien001/article/details/133298563?ops_request_misc=%7B%22request%5Fid%22%3A%22bc807b7c972b79eb086b07c7a89a778b%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=bc807b7c972b79eb086b07c7a89a778b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-133298563-null-null.142^v102^pc_search_result_base5&utm_term=python%E5%AE%89%E8%A3%85%E5%BA%93&spm=1018.2226.3001.4187的流程安装。

代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

第二步:找爬取数据的位置

       打开要爬取数据的网页,找到其在HTML上User-Agent的位置,并存储到headers字典里。

代码如下:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

第三步:解析数据

       对要爬取的运动时长、热量数据和心率区间数据进行解析。 

代码如下:

def parse_duration(element):
    """解析运动时长"""
    if element:
        return int(element.text.strip().replace('分钟', ''))
    return 0

def parse_number(element):
    """解析数值型数据"""
    return int(element.text.strip().replace('千卡', '')) if element else 0

def parse_range(element):
    """解析心率区间"""
    if element:
        return tuple(map(int, element.text.strip().split('-')))
    return (0, 0)

第四步:爬取keep运动数据

      调用requests库的get()函数读取网址+headers的运动记录,并将读取到的所有数据添加到all_data文件。pages参数是设置读取记录的最大页码。

代码如下:

def scrape_keep_data(pages):
    """爬取Keep公开运动记录"""
    base_url = "https://www.keep.com/activity/?page={}"
    all_data = []

    for page in range(1, pages + 1):
        try:
            response = requests.get(base_url.format(page), headers=headers)
            soup = BeautifulSoup(response.text, 'html.parser')

            # 解析运动记录
            records = soup.select('.WorkoutCard')
            for item in records:
                data = {
                    'date': item.select_one('.Time').text.strip(),
                    'duration': parse_duration(item.select_one('.Duration')),
                    'calories': parse_number(item.select_one('.Calorie')),
                    'heart_rate': parse_range(item.select_one('.HeartRate')),
                    'type': item.select_one('.WorkoutType').text.strip()
                }
                all_data.append(data)

         # 随机延迟防封禁
            time.sleep(random.uniform(1, 3))
        except Exception as e:
            print(f"Error scraping page {page}: {str(e)}")

    return pd.DataFrame(all_data)

完整代码:

# 导入库
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random


# 指定数据位置
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 解析数据格式
def parse_duration(element):
    """解析运动时长"""
    if element:
        return int(element.text.strip().replace('分钟', ''))
    return 0

def parse_number(element):
    """解析数值型数据"""
    return int(element.text.strip().replace('千卡', '')) if element else 0

def parse_range(element):
    """解析心率区间"""
    if element:
        return tuple(map(int, element.text.strip().split('-')))
    return (0, 0)

# 爬取运动数据
def scrape_keep_data(pages):
    """爬取Keep公开运动记录"""
    base_url = "https://www.keep.com/activity/?page={}"
    all_data = []

    for page in range(1, pages + 1):
        try:
            response = requests.get(base_url.format(page), headers=headers)
            soup = BeautifulSoup(response.text, 'html.parser')

            # 解析运动记录
            records = soup.select('.WorkoutCard')
            for item in records:
                data = {
                    'date': item.select_one('.Time').text.strip(),
                    'duration': parse_duration(item.select_one('.Duration')),
                    'calories': parse_number(item.select_one('.Calorie')),
                    'heart_rate': parse_range(item.select_one('.HeartRate')),
                    'type': item.select_one('.WorkoutType').text.strip()
                }
                all_data.append(data)

         # 随机延迟防封禁
            time.sleep(random.uniform(1, 3))
        except Exception as e:
            print(f"Error scraping page {page}: {str(e)}")

    return pd.DataFrame(all_data)

# df = scrape_keep_data(5)
# df.to_csv('keep_data.csv', index=False)

你可能感兴趣的:(python,开发语言,数据挖掘,爬虫)