import requests
import json
from requests.exceptions import RequestException
from urllib.parse import urlencode
from multiprocessing import Pool#多进程池
def get_response(offset,limit,SongID):
para = { #参数
'offset':offset,#页数
'limit':limit#总数限制
}
musicid = str(SongID) # 歌曲ID
musicurl = "http://music.163.com/api/v1/resource/comments/R_SO_4_"+musicid+"?"+urlencode(para) #歌曲api地址
headers = { #头结构
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'zh-CN,zh;q=0.8',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'vjuids=-13ac1c39b.1620457fd8f.0.074295280a4d9; vjlast=1520491298.1520491298.30; _ntes_nnid=3b6a8927fa622b80507863f45a3ace05,1520491298273; _ntes_nuid=3b6a8927fa622b80507863f45a3ace05; vinfo_n_f_l_n3=054cb7c136982ebc.1.0.1520491298299.0.1520491319539; __utma=94650624.1983697143.1521098920.1521794858.1522041716.3; __utmz=94650624.1521794858.2.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; JSESSIONID-WYYY=FYtmJTTpVwmbihVrUad6u76CKxuzXZnfYyPZfK9bi%5CarU936rIdoIiVU50pfQ6JwjGgBvSyZO0%2FR%2BcoboKdPuMztgHCJwzyIgx1ON4v%2BJ2mOvARluNGpRo6lmhA%5CfcfCd3EwdS88sPgxpiiXN%5C6HZZEMQdNRSaHJlcN%5CXY657Faklqdh%3A1522053962445; _iuqxldmzr_=32',
'Host':'music.163.com',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
}
try:
response = requests.post(musicurl,headers=headers)
if response.status_code == 200: #如果请求成功
return response.content #返回请求内容
except RequestException:
print("访问出错")
def parse_return(html): #解析返回页
data = json.loads(html)#将返回的值格式化为json
if data.get('comments'):
comments = data['comments']
SongInfo=[]
for item in comments:
person = []
person.append(item['user']['nickname']) #用户的昵称
person.append(item['user']['avatarUrl']) #用户的头像URL
person.append(item['content']) #用户的评论内容
SongInfo.append(person)
return SongInfo
def get_song(SongName):
url = "http://www.xiaoxina.cn/api.php?s=" + SongName + "&num=1" #只搜索一个结果,num表示搜索的结果数
req=requests.get(url)
html=json.loads(req.text) #加载为JSON格式
SongID=""
for item in html:
print(item["name"],item["picLink"],item["id"],item["singer"],item["url"])
SongID=SongID+str(item["id"])
return SongID #返回歌曲ID
if __name__ == "__main__":
SongName=input("请输入歌曲名字:")
SongID=get_song(SongName) #得到歌曲ID
gethtml = get_response(1,200,SongID) #得到歌曲评论的内容
SongInfo=parse_return(gethtml) #返回解析的内容
for a,b,c in SongInfo:
print(a,b,c)