第一步:分析问题,明确目标
需求就是把关卡内的代码稍作修改,将周杰伦前五页歌曲的歌词都爬取下来,结果就是全部展示打印出来。
第二步:写代码
Network - XHR-client_search - Headers - Query String Parameters , 观察里面参数的变化
怕你没记住,可以再又偷偷看一下哦,关卡内需要修改的代码:
import requests
url = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
# 这是请求歌曲评论的url
headers = {'origin':'https://y.qq.com',# 请求来源,本案例中其实是不需要加这个参数的,只是为了演示'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html',# 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',# 标记了请求从什么设备,什么浏览器上发出}
params = {
'g_tk':'5381',
'loginUin':'0',
'hostUin':'0',
'format':'json',
'inCharset':'utf8',
'outCharset':'GB2312',
'notice':'0',
'platform':'yqq.json',
'needNewCode':'0',
'cid':'205360772',
'reqtype':'2',
'biztype':'1',
'topid':'102065756',
'cmd':'8',
'needcommentcrit':'0',
'pagenum':0,
'pagesize':'25',
'lasthotcommentid':'',
'domain':'qq.com',
如果没有思路,可以偷偷看下提示哦~
参考代码
import requests
import json
# 引用requests,json模块url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'headers = {'origin':'https://y.qq.com',# 请求来源,本案例中其实是不需要加这个参数的,只是为了演示'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html',# 请求来源,携带的信息比“origin”更丰富,本案例中其实是不需要加这个参数的,只是为了演示'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',# 标记了请求从什么设备,什么浏览器上发出}for x in range(20):
# 伪装请求头params = {'ct':'24','qqmusic_ver': '1298','new_json':'1','remoteplace':'sizer.yqq.lyric_next','searchid':'48335540534966617','aggr':'1','cr':'1','catZhida':'1','lossless':'0','sem':'1','t':'7','p':str(x+1),'n':'10','w':'周杰伦','g_tk':'1714057807','loginUin':'0','hostUin':'0','format':'json','inCharset':'utf8','outCharset':'utf-8','notice':'0','platform':'yqq.json','needNewCode':'0'}res = requests.get(url, params = params,headers=headers)#下载该网页,赋值给resjson_music=res.json()# 使用json来解析res.textlist_music=json_music['data']['lyric']['list']# 一层一层地取字典,获取歌词的列表for music in list_music:#list_music是一个列表,music是它里面的元素print(music['content'].replace('\\n', ' '))#以content为键,查找歌词print("-----------------------------------------------------------------------------------------------------")
代码效果:
注意:
1.music[‘content’]里面提取出来的歌词是带有“\n”的,所以需要通过replace()函数将其清除掉,.replace("\n",’ ')
2.关于字符串去除符号的更多内容,可以参考下这篇文章Python中字符串String去除出换行符(\n,\r)和空格的问题