import datetime
import time
import requests
import uuid
from setting import *
content_dict ={
" 儿歌 " :["424529" , "245037" ],
" 故事 " :["12891461" , "260744" ],
" 古诗 " :["15161417" , "12914364" ],
}
def get_content_xmly (content_dict:dict ):
# 专辑 ID 和页码?
for tags, a_list in content_dict.items():
for aid in a_list:
# 专辑循环结束后,开启下一个循环 page 就又从 1 开始了
page=1
while True :
content_list=requests.get(CONTENT_LIST_URL%(aid, page), headers =HEADERS).json()
page+=1
# 导入 MongoDB 的时候,一次性导入多条,所以放到列表中,当换专辑切换的时候列表再次清空
content_mongo_list=[]
# 如果爬到的内容为空就断开
if not content_list.get('data' ).get('trackDetailInfos' ):
break
for content in content_list.get('data' ).get('trackDetailInfos' ):
# 获取音乐名字
music_name = content.get('trackInfo' ).get('title' )
music_url = content.get('trackInfo' ).get('playPath' )
music_file_name = uuid.uuid4()
# 将配置的路径拼接到文件里面
music_path=os.path.join(MUSIC_PATH, f" { music_file_name} .mp3" )
image_path=os.path.join(COVER_PATH, f" { music_file_name} .jpg" )
# 图片地址 -- 》 host+ 图片的 url
music_image = IMAGE_HOST + content.get('trackInfo' ).get('cover' )
# 把数据流写如文件里面去(图片和音乐并保存)
music = requests.get(music_url).content
with open (music_path, 'wb' ) as f:
f.write(music)
music_image = requests.get(music_image).content
with open (image_path, 'wb' ) as f:
f.write(music_image)
# 写入 Mongodb 里面去
content_info={
'title' :music_name,
'music' :f' { music_file_name} .mp3' , # 存放的是音乐的名字,而不是音乐内容 否则数据库得爆炸
'cover' :f' { music_file_name} .jpg' , # 存放的是音乐的图片,而不是音乐图片 否则数据库得爆炸
'tag' :tags,
'createTime' :datetime.datetime.now()
}
# 批量导入多条数据到数据库里面
content_mongo_list.append(content_info)
# 设置爬取等待时间
time.sleep(1 )
# 批量插入, content_list 设置为空就是一页结束后自动清空
MongoDB.content.insert_many(content_list)
# 运行函数
get_content_xmly(content_dict)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com