python爬虫实现音乐下载

音乐下载功能模块

# !/usr/bin/env python
# -*- coding:UTF-8 -*-
#
# @Version    :    1.0
# @Time       :    2021/5/19 14:55
# @Author     :    吴壬杰
# @File       :    音乐_MongoDB.py# from pymongo import *
from pymongo import MongoClient
import pandas as pd
import requests
import random
import json
import os# 音乐下载
def kuWoDownLoad():search_music = input("请输入作者或者歌曲名:")weheader = [['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'],['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2'],['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0']]kk_header = [i for i in random.choice(weheader)]# print(kk_header[0])# 请求头(一定要有'User-Agent','Referer','csrf','Cookie')header = {'User-Agent': str(kk_header),# 'Host': 'www.kuwo.cn','Referer': 'http://www.kuwo.cn/','csrf': 'D32I86ILA88','Cookie': '_ga=GA1.2.1490969665.1620831748; _gid=GA1.2.1678093837.1620831748; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1620831749; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1620831749; kw_token=D32I86ILA88'}try:for i in range(167):# 首页URLurl = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={}&pn={}&rn=30" \"&httpsStatus=1&reqId=30709280-b333-11eb-9d41-ad2a15a69fbf".format(search_music, i)# 发送请求获取首页面response = requests.get(url, headers=header, timeout=30).json()# 获取data下面的list内容list_response = response['data']['list']# 获取页数# list_response2 = response['data']['total']if int(response["data"]["total"]) % 30 > 0:i = int(response["data"]["total"]) // 30 + 1else:i = int(response["data"]["total"]) // 30print("一共{}页,正在爬取数据。。。。。。".format(i))# 循环获取对应内容for info in list_response:# 歌曲名music_name = info['name']# ridmusic_rid = info['rid']# 作者music_artist = info['artist']# 作者图像music_Image = info['pic']# 专辑music_album = info['album']# 专辑发布时间music_releaseDate = info['releaseDate']# 歌曲时长music_songTimeMinutes = info['songTimeMinutes']# 专辑简介# if info['albuminfo'] == None:#     info['albuminfo'] = "空值"#     music_albuminfo = info['albuminfo']# else:#     continue# print(music_Image)# 下载音乐(with open()会自动调用关闭文件,所以无需f.close())with open(os.path.expanduser("~") + '\\Desktop\\music\\' + "{}.mp3".format(music_name), 'wb') as f:# 下载的每一首歌的URL(使用的都是统一的,rid不同)music_api = 'http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3&br=128kmp3' \'&from=web&t=1620883237037&httpsStatus=1&reqId=f32a4ce1-b3aa-11eb-8486-6142833c02da'.format(music_rid)# 将具体下载歌的response转为字典music_play_url = requests.get(music_api, headers=header).json()# 通过真正的URL,以二进制的形式获取music_data = requests.get(music_play_url['url']).content# print(music_data)# 音乐信息内容(字典形式)music_info_data = {"music_name": music_name,"music_artist": music_artist,'music_Image': music_Image,"music_album": music_album,"music_releaseDate": music_releaseDate,# "music_albuminfo": music_albuminfo,"songTimeMinutes": music_songTimeMinutes,"music_data": music_data,"music_rid": music_rid}# 以二进制形式写入文件f.write(music_data)# json.dump()用于将dict类型的数据转成str,并写入到json文件中。下面两种方法都可以将数据写入json文件# data = json.dumps(music_info_data)# print(type(music_play_url))# print(type(music_data))print("下载成功:" + music_name)# 写入MongoDB库write_into_image(music_Image, header)write_into_mongo(Connecting_mongo(), music_info_data)print("写入数据库成功~")# 关掉break将会循环获取整个页面的音乐break# 关掉break将会循环获取整个页面的音乐(两个不可缺一)breakexcept requests.HTTPError:print("连接异常!")'''
def _connect_mongo(host, port, username, password, db):""" 指定帐户和密码建立连接 """if username and password:mongo_uri = 'mongodb://%s:%s@%s:%s/%s' % (username, password, host, port, db)conn = MongoClient(mongo_uri)else:"""无用户和密码连接"""conn = MongoClient(host, port)return conn[db]
def read_mongo(db, collection, query={}, host='localhost', port=27017, username=None, password=None, no_id=True):""" 从Mongo读取并存储到DataFrame """# 连接MongoDBdb = _connect_mongo(host=host, port=port, username=username, password=password, db=db)# 对特定(query)的数据库和集合进行查询new_data = db[collection].find(query)# 读取数据并构造DataFramedf = pd.DataFrame(list(new_data))# 删除MongoDB中主键_id# if no_id:#     del df['_id']# return df
'''def write_into_image(music_Image, header):# 在第一次发送请求的时候就获取了图片连接 music_Imageresponse_jpg = requests.get(url=music_Image, headers=header, timeout=30)# 下载图片(with open()会自动调用关闭文件,所以无需f.close())with open(os.path.expanduser("~") + '\\Desktop\\image\\' + "{}.jpg".format(34), 'wb') as f:# 以二进制形式写入文件f.write(response_jpg.content)print("保存图片成功!")# 写入MongoDB
def write_into_mongo(db, data):'''@params: data,将数据封装为字典,然后将其写入到MongoDB数据库中'''print("正在插入数据")try:'''# 连接MongoDB数据库# Client = MongoClient()# 查询数据库名# db_list = Client.list_database_names()# print(db_list)# 打开或创建名为data的collection,collection相当于关系型数据库中的数据库# 在MongoDB中,collection是文档的集合# db = Client.data# 或者使用类似引用字典值的方式打开或创建collection# db = Client['data']# 授权# db.authenticate(name='lu',password='123456',source='admin')# info = db['NBA']'''# table = db.personstable = db['kuwo_down']  # 指定集合collection# 插入单个documenttable.insert_one(data)# 插入多个document# table.insert_many(data)# 搜索所有数据# for person in table.find():#     print(person)# print('--------------')# 输出persons中的文档总数print('总数', '=', table.estimated_document_count())except Exception as e:print(e)def Connecting_mongo():# 连接MongoDB数据库Client = MongoClient('localhost', 27017)# 打开或创建名为db的collection,collection相当于关系型数据库中的数据库# 在MongoDB中,collection是文档的集合# db = Client['db']db = Client.db# table = db.persons# table = db['kuwo_down']  # 指定集合collectionreturn db# 删除功能
def Delete(db):table = db['kuwo_down']  # 指定集合collectionname = input("请输入删除歌曲名:")table.distinct("music_name")list_music_name = table.distinct("music_name")if name in list_music_name:# 删除单个documenttable.delete_one({"music_name": name})else:print("删除的歌曲不存在哦~")# 删除多个document# table.delete_many({"music_name": name})# 空字典将删除所有document# table.delete_many({})# 删除集合# table.drop()# 更新功能
def Update(db):table = db['kuwo_down']  # 指定集合collectionold_name = input("请输入更改项名称:")old_value = input("请输入更改项值:")old_value_one = {old_name: old_value}new_name = input("请输入更改项名称:")new_value = input("请输入更改项值:")new_value_one = {new_name: new_value}# 更改第一条匹配table.update_one(old_value_one, new_value_one)# 更改所有匹配# table.update_many(old_value_one, new_value_one)# 查询功能
def Read(db):table = db['kuwo_down']  # 指定集合collectionmusic_name = input("请输入查找的歌曲名:")# 搜索table文档中的第一条子文档,相当于关系型数据库中的记录# print(table.find_one())# print(table.find_one(music_name))# 搜索table集合中的所有文档# print(table.find({"music_name": music_name}))if music_name in table.distinct("music_name"):print("歌曲已存在~~~")else:print("不存在此歌曲~~~")# 显示指定条数# print(table.find().limit(1))# print(table.distinct("music_name"))# 增删改查
def create_Read_Update_Delete(num):# 如果字符串只包含数字则返回 True,否则返回 False。if num == '':print("什么都不想对我说吗~~~Giao\n直接用回车回避我吗~~~Giao")# 如果字符串中只包含数字字符,则返回 True,否则返回 False。elif num.isnumeric():# print("有")if int(num) == 1:kuWoDownLoad()elif int(num) == 2:Delete(Connecting_mongo())elif int(num) == 3:Update(Connecting_mongo())elif int(num) == 4:Read(Connecting_mongo())else:print("你连1234都不记得,更何况是我\n走了,这次罚你,再也见不到我!")# 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。elif num.isalpha():print("请不要输入字母!")else:print("格式错误!")# 数据获取
def huoqu_shuju(db):table = db['kuwo_down']  # 指定集合collection# 方法一# 获取music_name,直接从MongoDB去重查询获得# new_data = table.distinct("music_name")# 方法二# 读取或者加载数据data = pd.DataFrame(list(table.find()))  # data为'str'类型# data = pd.DataFrame(table.find())  # data为'str'类型# 选择需要显示的字段new_data = data[['music_name', 'music_artist']]# 方法不全# data = table.find()# for new_data in data:#     print(new_data.keys())#     print(new_data.values())#     print(new_data.items())#     break# 打印输出print(new_data)if __name__ == "__main__":# os.path.expanduser("~"), 'Desktop') 把path中包含的"~"和"~user"转换成用户目录# os.path.join() 把目录和文件名合成一个路径# os.path.exists() 路径存在则返回True,路径损坏返回Falseif not os.path.exists(os.path.join(os.path.expanduser("~") + '\\Desktop\\music')):os.mkdir(os.path.join(os.path.expanduser("~") + '\\Desktop\\music'))if not os.path.exists(os.path.join(os.path.expanduser("~") + '\\Desktop\\image')):os.mkdir(os.path.join(os.path.expanduser("~") + '\\Desktop\\image'))num = input("下载(99%可不一定没爱过呀!):1\n删除(即使在舍不得,也得走啦!):2\n更新(没有了你,我会开始新生活!):3\n查询(来过,你可不一定,找得到我!):4\n请输入:")# 选择对应需求功能create_Read_Update_Delete(num)# 展现数据huoqu_shuju(Connecting_mongo())

python爬虫实现音乐下载相关推荐

  1. python爬虫之音乐下载

    使用爬虫实现音乐下载 需要用到以下几点内容 requests请求 文件操作 一点点正则表达式 首先,分析我们要爬取的网站,这里用到的是 好听轻音乐网, 第一步,选择任意一首歌点击加号,添加到列表. 2 ...

  2. Python爬虫_音乐案例

    Python爬虫_音乐案例 [案例目的]:下载音乐 [第三方库]:1.requests 2.perttytable [开发环境]:1.Python3.8 2.PyCharm 2022.1 # http ...

  3. python爬虫教程下载-Python爬虫视频教程全集下载

    原标题:Python爬虫视频教程全集下载 Python作为一门高级编程语言,在编程中应用得非常广泛.随着人工智能的发展,python人才的需求更大.当然,这也吸引了很多同学选择自学Python爬虫.P ...

  4. python爬虫实现批量下载百度图片

    今天和小伙伴们合作一个小项目,需要用到景点图片作为数据源,在百度上搜索了一些图片,感觉一个一个手动保存太过麻烦,于是想到用爬虫来下载图片. 本次代码用到了下列一些python模块,需要预先安装Beau ...

  5. Python 爬虫 m3u8的下载及AES解密

    python爬虫 m3u8的下载及AES加密的解密 前言 2023.1.23更新 线程池版 完整代码 异步协程版 前言 这里与hxdm分享一篇关于m3u8视频流的爬取下载合并成mp4视频的方法,并且支 ...

  6. python网易云音乐下载,可选择歌曲,下载路径

    效果图 代码中用到了Crypto模块,Windows安装时会报错,① 建议选择对应解释器的版本搜索安装依赖.whl后缀的依赖包文件,找到之后直接pip install XXX.whl就可以了,在文章后 ...

  7. python网易云音乐下载_GUI图形化界面

    效果展示 1,打包exe文件,window直接可以运行 2,输入歌曲名字可以直接下载 3,下载后的歌曲保存在netease.exe文件所在的同一个文件夹中,music_netease文件夹是程序自动创 ...

  8. python网易云音乐下载打包exe文件,Windows可运行

    下载原理: 通过官方的下载链接http://music.163.com/song/media/outer/url?id=歌曲id.mp3, 分析网页寻找歌曲id组装成song_url,urlretri ...

  9. 使用Python爬虫示例-自动下载网页音频文件

    使用Python爬虫示例-自动下载网页音频文件 使用库 目标网站 获取并解析网页源代码 访问下载链接 使用库 requests 用来发送http请求. BeautifulSoup 一个灵活又方便的网页 ...

最新文章

  1. 数据库开发基本操作-关于sql server 2005 未开放1433端口的问题
  2. ping mac地址_局域网ip地址如何显示?一个软件搞定
  3. Python如何实现数据可视化
  4. oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
  5. 使用Kubernetes和Docker将Spring Boot与MongoDB作为容器部署
  6. JFrog Container Registry 搭建Docker镜像仓库 (docker 版本)
  7. js 数字序号 转 字母序号
  8. KindEditor在eclipse里的配置方法
  9. protopype 和 __proto__的区别
  10. python和易语言爬虫速度_如何优化 Python 爬虫的速度?
  11. 《黑镜》黑科技成真 | 解码脑电信号,AI重构脑中的画面
  12. net空间一次购买终身使用_西部数码使用指南:如何选择合适的虚拟主机
  13. mysql 实例和数据库名_oracle 实例名和服务名以及数据库名区别
  14. ILOG CPLEX 部分语法汇总
  15. 免费看小说,国产浏览器出手了,吊打各类阅读软件
  16. 华为云桌面windows版客户端_华为云——云桌面,开启企业云办公时代
  17. [IT生活推荐]大家一起来玩游戏喽,来的都进!
  18. 总是做不好需求管理?这6款必备工具送给你
  19. 电脑恢复删除文件及注册表实现
  20. HDU 2202 最大三角形 (凸包)

热门文章

  1. 一文搞懂鱼眼相机模型
  2. JSF学习笔记超详细,从入门到精通,持续更新中~
  3. HKUST-Aerial-Robotics /grad_traj_optimizationPublic
  4. MySQL中count是什么函数_MySQL中
  5. 7只老鼠找除100瓶水的有毒的水
  6. 基因结构注释软件PASA安装全纪录
  7. 电脑网正常,除了IE之外其他浏览器都能正常上网,IE不能上网解决办法
  8. 牛客网SQL大厂面试真题(二)
  9. 什么叫共同富裕,刘强东给老板们打了个样
  10. Vue3 的 ref 和 reactive 问题