python实现多功能分区下载

· Special

v1 版本

使用字典分别执行
import requests
#设置已下载集合
dl_pic_list= set()
dl_video_list= set()
dl_nba_list= set()

#通用下载函数,以及储存
def dl_any(file_link,file_name):
    res = requests.get(url=file_link,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'})
    with open(f'files/{file_name}', 'wb') as f:
        f.write(res.content)

#下载图片
def dl_pic():
    image_dict = {
        "1": ("吉他男神", "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"),
        "2": ("漫画美女", "https://hbimg.huabanimg.com/703fdb063bdc37b11033ef794f9b3a7adfa01fd21a6d1-wTFbnO"),
        "3": ("游戏地图", "https://hbimg.huabanimg.com/b438d8c61ed2abf50ca94e00f257ca7a223e3b364b471-xrzoQd"),
        "4": ("alex媳妇", "https://hbimg.huabanimg.com/4edba1ed6a71797f52355aa1de5af961b85bf824cb71-px1nZz"),
    }

    #循环展示可供下载
    while True:
        text_list = []
        for k, v in image_dict.items():
            #设置循环限制
            if k in dl_pic_list:
                continue
            text = f'{k}-{v[0]}'
            text_list.append(text)

        #判断列表是否为空
        if not text_list:
            print('无可下载选项')
        else:
            text = ';'.join(text_list)
            print(text)

        # 用户输入以及限制
        user_input = input('请输入你想要的 q/Q').strip()
        #选择退出
        if user_input.upper() == 'Q':
            print('正在退出')
            return
        #已经下载
        if user_input in dl_pic_list:
            continue
        #超出范围
        if not image_dict[user_input]:
            print('超出范围')
            break

        #下载
        dl_any(image_dict[user_input][1],f'{image_dict[user_input][0]}.png')
        #添加已经下载序号
        dl_pic_list.add(user_input)

#下载视频
def dl_video():
    video_dict = {
                "1":{"title":"东北F4模仿秀",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog"},
                "2":{"title":"卡特扣篮",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g"},
                "3":{"title":"罗斯mvp",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg"},
            }

    while True:
        # 循环展示
        text_list = []
        for k, v in video_dict.items():
            #判断是否已经下载
            if k in dl_video_list:
                continue
            text = f'{k}-{v["title"]}'
            text_list.append(text)
        #判断展示列表是否为空
        if not text_list:
            print('无可下载选项')
        else:
            text = ';'.join(text_list)
            print(text)



        #用户输入
        user_input = input('输入你想要的序号 q/Q').strip()
        #限制,退出,超范围,已经下载
        if user_input.upper() == 'Q':
            print('正在退出')
            break
        if user_input in dl_video_list:
            print('已经下载')
            continue
        if not video_dict[user_input]:
            print('不再范围')

        #下载
        dl_any(video_dict[user_input]['url'],f'{video_dict[user_input]["title"]}.png')
        dl_video_list.add(user_input)


def dl_nba():
    nba_dict = {
                "1":{"title":"威少奇才首秀三双","url":"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc20000bvi413nedtlt5abaa8tg&ratio=720p&line=0"},
                "2":{"title":"塔图姆三分准绝杀","url":"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fb60000bvi0ba63vni5gqts0uag&ratio=720p&line=0"}
            }

    while True:
        # 循环展示
        text_list = []
        for k, v in nba_dict.items():
            # 判断是否已经下载
            if k in dl_video_list:
                continue
            text = f'{k}-{v["title"]}'
            text_list.append(text)
        # 判断展示列表是否为空
        if not text_list:
            print('无可下载选项')
        else:
            text = ';'.join(text_list)
            print(text)

        # 用户输入
        user_input = input('输入你想要的序号 q/Q').strip()
        # 限制,退出,超范围,已经下载
        if user_input.upper() == 'Q':
            print('正在退出')
            break
        if user_input in dl_nba_list:
            print('已经下载')
            continue
        if not nba_dict[user_input]:
            print('不再范围')

        # 下载
        dl_any(nba_dict[user_input]['url'], f'{nba_dict[user_input][0]}.png')
        dl_nba_list.add(user_input)

choice_dict = {
    '1':dl_pic,
    '2':dl_video,
    '3':dl_nba,
}

print('开始执行系统')
while True:
    print('1.下载图片; 2.下载视频; 3.下载NBA')
    user_input = input('输入序号 q/Q').strip()
    if user_input.upper() == 'Q':
        break
    func = choice_dict[user_input]
    func()

v2版本

使用大字典囊括数据,根据value分流处理方法
import requests

db = {
    '1':{
        'area':'A',
        'dict':{
        "1": ("吉他男神", "https://hbimg.huabanimg.com/51d46dc32abe7ac7f83b94c67bb88cacc46869954f478-aP4Q3V"),
        "2": ("漫画美女", "https://hbimg.huabanimg.com/703fdb063bdc37b11033ef794f9b3a7adfa01fd21a6d1-wTFbnO"),
        "3": ("游戏地图", "https://hbimg.huabanimg.com/b438d8c61ed2abf50ca94e00f257ca7a223e3b364b471-xrzoQd"),
        "4": ("alex媳妇", "https://hbimg.huabanimg.com/4edba1ed6a71797f52355aa1de5af961b85bf824cb71-px1nZz"),
    },
        'ext':'png',
        'set':set()
    },
'2':{
        'area':'B',
        'dict':{
                "1":{"title":"东北F4模仿秀",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f570000bvbmace0gvch7lo53oog"},
                "2":{"title":"卡特扣篮",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f3e0000bv52fpn5t6p007e34q1g"},
                "3":{"title":"罗斯mvp",'url':"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f240000buuer5aa4tij4gv6ajqg"},
            },
        'ext':'mp4',
        'set':set()
    },
'3':{
        'area':'C',
        'dict':{
                "1":{"title":"威少奇才首秀三双","url":"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc20000bvi413nedtlt5abaa8tg&ratio=720p&line=0"},
                "2":{"title":"塔图姆三分准绝杀","url":"https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fb60000bvi0ba63vni5gqts0uag&ratio=720p&line=0"}
            },
        'ext':'mp4',
        'set':set()
    },
}



#下载存储
def download_file(filename,fileurl):
    res = requests.get(url=fileurl,headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'})
    with open(f'files/{filename}', 'wb') as f:
        f.write(res.content)


#处理获取的键值对
def handler(area):
    while True:
        print(f"欢迎来到{area['area']}")

        #循环展示
        for k,v in area['dict'].items():
            if k in area['set']:
                continue
            #判断v是元组还是字典
            if type(v) == tuple:
                file_name,file_url = v
            elif type(v) == dict:
                file_name,file_url = v['title'],v['url']

            #输出序号和名字
            text = f'{k}-{file_name}'
            print(text)

        #序号选择
        user_input = input('输入序号 q/Q')
        #退出
        if user_input.upper() == 'Q':
            break
        #已经下载
        if user_input in area['set']:
            print('已经下载')

        #选中一行的键值对
        line_value = area['dict'][user_input]
        if type(line_value) == tuple:
            file_name, file_url = v
        elif type(line_value) == dict:
            file_name, file_url = v['title'], v['url']

        #下载
        file_name_ext = f"{file_name}.{area['ext']}"
        download_file(file_name_ext,file_url)
        area['set'].add(user_input)



#选择分区
while True:
    print('1.图片; 2.视频; 3.nba;')
    user_input_area = input('输入你需要进入的分区,q/Q')
    if user_input_area.upper() == 'Q':
        break
    user_choice_area = db[user_input_area]
    handler(user_choice_area)

python


评论