jin20201 2020-04-22 22:23 采纳率: 0%
浏览 201

求高手解答Python爬歌系统中出现的数据问题

import requests
import json
import os
import urllib.parse
#j为歌曲标头
j=1
class KuGou:
#初始化
def init(self,word):
#创建目录
path="E:/music/" #路径可以自己定义
if not os.path.exists(path):
os.mkdir(path)
self.path=path
self.word=word
word1= urllib.parse.quote(word)
#带参数访问网址
self.url="https://songsearch.kugou.com/song_search_v2?callback=jQuery112404383246257004936_1550576119140&keyword={}&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1550576119142".format(word1)

#发出requests请求
def requests_get(self):
    r=requests.get(self.url)
    r.encoding="utf-8"
    self.req = r.text
   #print(self.req)

#获取并且展示歌曲信息
def show_song(self):
    global j
  #songID_list={}
    songhash_list={}  #hash列表
    song_name={}    #歌曲名字
    # json文件信息  
    kg=json.loads(self.req.lstrip("jQuery112404383246257004936_1550576119140(").rstrip().rstrip(r')'))
    self.kg=kg
    for song in kg['data']['lists']:
        print("{0}————{1}".format(j,song['SongName']))
        song_name[str(j)]=song['SongName']
        songhash_list[str(j)]=song['FileHash']
        j+=1
    self.song_name=song_name
    self.songhash_list=songhash_list
  #self.songID_list=songID_list
  #print(songhash_list)

#下载歌曲
def download_song(self):
    num=input("您想下载哪首歌(输数字):")
    url="http://www.kugou.com/yy/index.php?r=play/getdata&hash={}".format(self.songhash_list[num])
    hash_res=requests.get(url)
    hash_js=hash_res.json()
    play_url=hash_js['data']['play_url']
  #print(play_url)
    with open(self.path+self.song_name[num]+".mp3","wb") as f:
        f.write(requests.get(play_url).content)
    print("《{}》下载完成".format(self.song_name[num]))


#选择是否继续爬取
def exit(self):
    str1=input("继续下载(y),还是退出(n):")
    return str1

if name == "__main__":
print("欢迎来到酷狗下载系统")
word=input("请输入歌手名:")
#word="杨宗纬"
pachong=KuGou(word)
pachong.requests_get()
pachong.show_song()
pachong.download_song()
str1=pachong.exit()
while str1!="n":
if str1 == "y":
pachong.download_song()
str1 = pachong.exit()
elif str1 == "n":
print("已退出")
else:
print("输入错误,请重新输入!")
str1 = pachong.exit()

                    运行出现以下问题:
                    PS C:\Users\Administrator> & python c:/Users/Administrator/Desktop/用Python写一个酷狗爬歌系统.py

欢迎来到酷狗下载系统
请输入歌手名:余姚
1————余姚
2————十载清明
3————余姚杨梅中国红
4————余姚后生和慈溪姑娘「黑色情人节版」
5————余姚这场雨伐晓得要落到什个辰光
6————余姚这场雨伐晓得要落到什个辰光 (伴奏)
7————第383集 危险又亲切的今余姚
8————最爱杨梅在余姚 (伴奏)
9————余姚
10————余姚杨梅中国红 (伴奏)
11————最爱杨梅在余姚
12————天上无云不下雨 (原版伴奏)
13————余姚方言歌曲涛声依旧
14————余慈方言歌曲 大姑娘
15————方言歌曲欢迎来梁弄走走
16————“余”你同在,“姚”在我心(钢琴版)
17————十里梅乡
18————十里梅乡 (伴奏)
您想下载哪首歌(输数字):9
Traceback (most recent call last):
File "c:/Users/Administrator/Desktop/用Python写一个酷狗爬歌系统.py", line 71, in
pachong.download_song()
File "c:/Users/Administrator/Desktop/用Python写一个酷狗爬歌系统.py", line 52, in download_song
play_url=hash_js['data']['play_url']
TypeError: list indices must be integers or slices, not str

  • 写回答

1条回答 默认 最新

  • 放风喽 2020-04-23 12:28
    关注

    list indices must be integers or slices, not str
    翻译一下
    列表索引必须是整数或切片,而不是str

    所以
    num=int(input("您想下载哪首歌(输数字):"))
    也可以用try提示输入数字

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集