分享好友 行情首页 行情分类 切换频道
KeepReptile:健身体验爬虫
2024-12-24 07:12  浏览:67

import re

import os

import time

import requests

from contextlib import closing





 

class KeepReptile(object):

    def __init__(self, url, headers, keep_suburl, keep_video_suburl):

        self.url = url

        self.headers = headers

        self.keep_suburl = keep_suburl

        self.keep_video_suburl = keep_video_suburl

KeepReptile:健身体验爬虫

    

 

    def get_download_video(self):

        download_video = {}

        html_text = requests.get(self.url, headers=self.headers).text

 

        classification_urls = re.findall('/workouthashtags/w*', html_text, re.S)

        # video_ids = re.findall('(<a href="/workouthashtags/)^[a-z][0-9]$', html_text, re.S)

        #分类url

        for classification_url in classification_urls:

            new_classification_url = self.keep_suburl + classification_url 

            html_text = requests.get(new_classification_url, headers=self.headers).text

            subclassification_urls = re.findall('/plans/w*', html_text, re.S)

            #子分类url

            for subclassification_url in subclassification_urls:

                new_subclassification_url = self.keep_suburl + subclassification_url

                html_text = requests.get(new_subclassification_url, headers=self.headers).text

                action_urls = re.findall('/exercises/w*', html_text, re.S)

                

                #动作分类url

                for action_url in action_urls:

                    new_action_url = self.keep_suburl + action_url

                    html_text = requests.get(new_action_url, headers=self.headers).text

                    video_urls = re.findall('/chaos/w*/w*.mp4', html_text, re.S)

                    actions_names = re.findall('<h2 class="name">(.*?)</h2>', html_text, re.S)

                    #video url

                    for action_name, video_url in zip(actions_names, video_urls):

                        final_video_url = self.keep_video_suburl + video_url

                        print(action_name, final_video_url)

                        download_video[action_name] = final_video_url

                        # download_url.append(final_video_url)

        return download_video

 

    def download_video(self, video_path, action_name, video):

        video_name = video_path + action_name '.mp4'

        print('video_name:', video_name)

        with closing(requests.get(video, headers=self.headers, stream=True, verify=False)) as res:

            chunk_size = 1024*10

            content_size = int(res.headers['content-length'])

            if os.path.exists(video_name) and os.path.getsize(video_name)>=content_size:

                print('已下载')

                return

            if res.status_code == 200:

                print('开始下载')

                with open(video_name, "wb") as f:

                    p = ProgressData(size = content_size, unit='Kb', block=chunk_size, file_name=video_name)

                    for chunk in res.iter_content(chunk_size=chunk_size):

                        if chunk:

                            f.write(chunk)

                            p.output()



 

class ProgressData(object):

 

    def __init__(self, block,size, unit, file_name='', ):

        self.file_name = file_name

        self.block = block/1000.0

        self.size = size/1000.0

        self.unit = unit

        self.count = 0

        self.start = time.time()

    def output(self):

        self.end = time.time()

        self.count += 1

        speed = self.block/(self.end-self.start) if (self.end-self.start)>0 else 0

        self.start = time.time()

        loaded = self.count*self.block

        progress = round(loaded/self.size, 4)

        if loaded >= self.size:

            print('%s下载完成 '%self.file_name)

        else:

            print('{0}下载进度{1:.2f}{2}/{3:.2f}{4} {5:.2%} 下载速度{6:.2f}{7}/s'.format(self.file_name, loaded, self.unit, self.size, self.unit, progress, speed, self.unit))

            print('%50s'%('/'*int((1-progress)*50)))


 

def main():

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

    url 'https://www.gotokeep.com/training'

    keep_suburl 'https://www.gotokeep.com'

    keep_video_suburl 'https://static1.keepcdn.com'

    video_path 'G:/zh/zh/reptile_video/keep_video/'

    k = KeepReptile(url, headers, keep_suburl, keep_video_suburl)

    video_disc = k.get_download_video()

    for action_name, video in video_disc.items():

        k.download_video(video_path ,action_name, video)

 

if __name__ ="__main__":

    以上就是本篇文章【KeepReptile:健身体验爬虫】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/3941.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多   
最新新闻
单反 手机(单反手机是什么意思)
  单反手机:摄影的新纪元  随着科技的飞速发展,手机的功能越来越强大,其中摄影功能尤为突出。如今,我们迎来了一个新的时
酷派手机图片(酷派手机壁纸)
  酷派手机图片:展现时尚与科技的完美结合  在当今智能手机市场,酷派手机以其独特的风格和卓越的性能赢得了广大消费者的喜
手机qq的文件在哪个文件夹(手机qq的文件在哪儿)
  《手机QQ的文件在哪个文件夹》  随着科技的进步,手机已成为我们日常生活中不可或缺的一部分。手机QQ作为我们常用的社交软
12306修改手机号(12306修改手机号收不到验证码)
  关于《12306修改手机号》的文章  在当今数字化时代,手机已成为我们生活中不可或缺的一部分。对于经常乘坐火车出行的人来
手机的介绍(手机的介绍资料)
  手机的介绍  随着科技的飞速发展,手机已经成为了我们日常生活中不可或缺的一部分。它的影响力已经渗透到我们生活的各个领
2000以内的手机(2000以内的手机哪款性价比高2024年)
  关于《2000元以内的手机》的文章  随着科技的飞速发展,手机已经成为我们日常生活中不可或缺的一部分。在预算仅为2000元的
手机两个微信(手机两个微信怎么取消默认授权设置)
  手机两个微信的使用与探讨  随着科技的快速发展,微信已经成为我们日常生活中不可或缺的一部分。很多人在手机中安装两个微
手机怎么隐藏游戏(手机怎么隐藏游戏不被发现)
  手机怎么隐藏游戏  随着智能手机的普及,很多人都会在手机上玩游戏。但有时我们并不想被别人知道我们在玩游戏,或者我们需
华为定制版手机(华为定制版手机有哪些)
  华为定制版手机:科技与个性的完美结合  随着科技的飞速发展,智能手机已经成为我们日常生活中不可或缺的一部分。在众多手
手机密码忘记(手机密码忘记了怎么办才能解开oppo)
  关于手机密码忘记的问题  随着智能手机的普及,我们的生活已经离不开手机。然而,有时候我们会遇到一些小问题,其中之一就
本企业新闻
推荐企业新闻
发表评论
0评