标签:%s ret .com 自己的 过程 单引号 请求 参数 use
最近又到了一年一度的年底总结了,网易云音乐如此退出了年度歌单,又一次被刷朋友圈了。作为程序员,就好奇的想验证下结论准不准,随便回顾下爬虫的操作。需要用到的模块
import requests
import re
import pymssql
import matplotlib.pyplot as plt # 数学绘图库
from PIL import Image
import numpy as np # 科学数值计算包,可用来存储和处理大型矩阵
import jieba # 分词库
from wordcloud import WordCloud, ImageColorGenerator # 词云库
from selenium import webdriver
import time
自定义三个函数
a)get_info():获取历史列表中的所有歌曲并将其写入数据库中,同时返回所有歌曲的id,以便后面获取歌词
代码块如下:
def get_info(url,headers):
‘‘‘获取历史列表中的所有歌曲并将其写入数据库中,同时返回所有歌曲的id,
以便后面获取歌词‘‘‘
"""
@url:历史列表中的URl
@headers:请求头,带cookie
"""
data = {
‘encSecKey‘: ‘post参数->浏览器Network获取或抓包获取‘,
‘params‘: ‘post参数->浏览器Network获取或抓包获取‘
}
html = requests.post(url,data=data,headers=headers)
html.encoding=‘utf-8‘
lmusic = html.json()[‘allData‘]
listid = []
try:
connet = pymssql.connect(host=‘127.0.0.1‘,user=‘sa‘,password=‘123456‘,database=‘WebSpider‘)#数据库参数
except pymssql.OperationalError as p:#异常处理
print(p)
else:
cursor = connet.cursor()
for music in lmusic:
playCount=music[‘playCount‘]
mname=music[‘song‘][‘name‘]
mid=music[‘song‘][‘id‘]
listid.append(mid)
musicer = music[‘song‘][‘ar‘][0][‘name‘]
print("正在向数据库插入%s的信息"%mname)
if ‘\‘‘ in mname:
#对带有单引号的内容进行转义,不然插入数据库会报错
mname=mname.replace(‘\‘‘,‘\‘\‘‘)
sql = "insert into Music_wyy_2019 values (‘%d‘,‘%s‘,‘%s‘,‘%d‘)" % (mid, mname, musicer, playCount)
else:
sql = "insert into Music_wyy_2019 values (‘%d‘,‘%s‘,‘%s‘,‘%d‘)" % (mid, mname, musicer, playCount)
cursor.execute(sql)
connet.commit()
finally:
connet.close()
print("数据库已关闭")
return listid
b)get_lyric():获取所有歌曲的歌词
吐槽一句,之前直接用‘http://music.163.com/api/song/media?id={id}‘.format(id=id), 就可以通过这个api直接获取对应id歌曲的歌词,现在被封了,只能用UI来分别爬取了,效率极低(考虑用多线程处理)
c)get_wordcloud():生成对应的词云图
3.定义好歌词存放的位置、选择词图的背景图及最后生成词图的位置,依次调用上面三个函数即可。效果图如下:
4.关注公众号,回复’网易云’三个字即可获取完整代码,还可获取专属个人最爱音乐词图定制全过程代码
标签:%s ret .com 自己的 过程 单引号 请求 参数 use
原文地址:http://blog.51cto.com/10836356/2342110