Python入门练习:酷我热歌榜Json格式数据分析 + Sqlite3数据库
2019-03-13 16:43
766 查看
版权声明:随便整,没版权 https://blog.csdn.net/bosslay/article/details/88536018
本篇适合新手练习,欢迎交流!
import sqlite3#调用sql数据库 import requests#调用请求库 import time##调用时间库 from urllib.request import urlretrieve##调用下载函数 import os#调用文件件函数 base_file = 'kuwo_sql_data'#建立初始文件夹 if not os.path.exists(base_file):#判断存无 os.mkdir(base_file)#如无,则建立 db = sqlite3.connect('kuwo.db')##连接数据库 cursor = db.cursor()#启动数据库游标 sql= "CREATE TABLE IF NOT EXISTS KUWO_DATA (歌曲ID INTEGER PRIMARY KEY,歌曲名称 VARCHAR(20) ,演唱歌手 VARCHAR (20),唱 4000 片名称 VARCHAR (20),歌曲评分 INTEGER (100),历史最高排名 INTEGER (100),下载地址 VARCHAR )"##创建数据库 cursor.execute(sql)#执行sql语句 url = 'http://kbangserver.kuwo.cn/ksong.s?from=pc&fmt=json&type=bang&data=content&id=16&pn=0&rn=200&isbang=1&show_copyright_off=0&pcmp4=1&bangid=0&t=1528788054321&vipver=MUSIC_8.7.7.0_PQ'##接口地址 headers = { 'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' }###请求头 print('爬虫启动成功!') print('已获取初始地址,请求返回数据...') response = requests.get(url,headers=headers).json()#请求并返回格式为json的数据 list_name = response['name']#提取排行榜名称 list_info = response['info']#提取排行榜信息 up_date = response['pub']#提取排行榜发布日期 print('JSON数据返回成功.开始解析...') list_img = response['v9_pic2']##提取排行榜封面 list_num = response['num']#提取排行榜歌曲数量 songs = response['musiclist']##提取排行榜歌曲详情,准备进行及解析 #urlretrieve(list_img,f'{base_file}/{list_name}.jpg')#调用函数下载排行榜单封面(此处调用会间歇性报错,老师提供了另一种解决方案,根据字节流下载,附在之后) print('榜单封面下载完成!') for idx , song in enumerate(songs): time.sleep(1)#防止访问过快,休眠函数 #print(idx,song) song_id = song['id']#提取歌曲id song_name = song['name']#提取歌曲名称 song_author = song['artist']#提取歌曲演唱歌手 song_album = song['album']#提取唱片名称 song_score = song['score100']#提取歌曲评分 song_rank = song['highest_rank']#提取歌曲历史最高排名 song_dolink = f'http://antiserver.kuwo.cn/anti.s?rid=MUSIC_{song_id}&format=mp3&type=convert_url&response=url'#拼接歌曲下载地址 print('▼'*50) print(f'嗅探到当前第{idx}首歌曲\n歌曲ID:{song_id}\n歌曲名称:{song_name}\n演唱歌手:{song_author}\n唱片名称:{song_album}\n歌曲评分:{song_score}\n历史最高排名:{song_rank}') try:####因有的歌曲信息不全,为防止写入时触发异常,故使用异常捕获 insert_sql = f"INSERT INTO KUWO_DATA(歌曲ID,歌曲名称,演唱歌手,唱片名称,歌曲评分,历史最高排名,下载地址) VALUES({song_id},'{song_name}','{song_author}','{song_album}',{song_score},{song_rank},'{song_dolink}')"##拼接sql语句 cursor.execute(insert_sql)#执行sql语句 db.commit()#提交执行 sort_sql = “SELECT * FROM KUWO_DATA ORDER BY 歌曲ID ASC”##按照歌曲ID升序的方式排列 cursor.excute(sort_sql)##执行sql语句 except Exception as error_count: print('正在写入数据库,请稍后') cursor.close()#关闭游标 db.close()#关闭数据库
字节流下载方法代码
#下载地址的url url = f"http://antiserver.kuwo.cn/anti.s?rid=MUSIC_{song_id}&format=mp3&type=convert_url&response=url" # 发请求,获取下载链接 response = requests.get(url, headers=headers) # 获取歌曲下载地址 download_url = response.text print(f'正在下载:{music["name"]}') # 打开文件,以字节流的方式写入 with open(f'{music["name"]}.mp3', 'wb+') as f: # 获取文件的字节数据 data = requests.get(download_url, headers=headers, timeout=100).content # 写入到文件中 f.write(data)
解析过程输出界面
sqlite3数据库界面
end()
相关文章推荐
- python练习:请求链接,得到JSON格式返回,分析数据
- pl/sql入门第五章--数据库数据对象分析(下)
- python使用json格式进行数据封装
- Json数据格式的使用方法入门教程
- python使用json格式进行数据封装
- android 用json格式同步数据库数据时遇到null值如何传递
- Python数据分析入门之pandas基础总结
- Java入门系列:处理Json格式数据
- asp.net数据库生成LigerUi树Tree结构Json格式数据(有点绕,附基本源代码)
- python开发_json_一种轻量级的数据交换格式
- Python学习之利用Python处理JSON格式数据
- python将json格式的数据转换成文本格式的数据或sql文件
- JSON数据的格式和解析(使用GSON)入门
- 使用python开发json、csv数据格式转换工具
- 利用python进行数据分析-数据加载、存储与文件格式1
- Android连接服务器数据库查询+Gson解析(List和Map)格式json数据(二)
- pl/sql入门第四章--数据库数据对象分析(上)
- python从snmp取出数据以json格式写入指定ZMQ
- php执行数据库查询返回json格式数据
- php执行数据库查询返回json格式数据