- 创建下载|储存函数 def dl_any(file_link,file_name):
- 定义三个分区,以包含序号和下载地址和名字的字典为载体
- 三个分区对应三个函数,函数获取对应的数据(本地/网络)
将字典数据读取到内存,并循环读取展示
- 进行判断
- 将已经下载的序号放入提前创建的集合set以供检验调用
读取用户输入数值
- 进行判断
- 是否符合范围
- 是否退出
- 是否已经下载(从预先设置set获取)
- 调用下载储存函数
将三个函数放入整体循环
- 创建以字典为载体的键值对,以供选择功能(键为序号)
判断
- 退出
- 根据序号获取执行的函数
- 执行
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)