定义“music”怎么办


import requests
from lxml import etree

with open("豆瓣音乐top.txt","a", encoding="utf-8")as f:
    for i in range(10):

        url ="https://music.douban.com/top250?start=0".format(i * 25)
        headers= {"User-Agent":"Nozilla/5.0(compatible; MSIB 5.5; Windows 10)"}
        data = requests.get(url,headers=headers).text
        s = etree.HTML(data)

        # 歌曲整体的xpath
        music = s.xpath('//*[id="content"]/div/div[1]/div/table')

        for music in musics:
            music_name = music.xpath('./tr/td[2]/div/a/text()')[0].strip()  # 歌名
            music_author = music.xpath('./tr/td[2]/div/p[1]/text()')[0].strip  # 作者

            f.write("歌名:{}\n".format(music_name))
            f.write("作者:{}\n".format(music_author))
            f.write("\n")

跟着一个博主做的,说我没有定义“music”找半天找不到解决方法,所以来询问一下,谢谢。


    for music in musics:
NameError: name 'musics' is not defined. Did you mean: 'music'?

Process finished with exit code 1

```

music = s.xpath('//*[id="content"]/div/div[1]/div/table')
改成:

musics = s.xpath('//*[id="content"]/div/div[1]/div/table')

在您的代码中,有一处错误,即在 for 循环中的语句 for music in musics: 中,变量名应该与之前定义的变量名一致,即 music,而不是 musics。因此,系统提示 NameError,表示找不到变量 musics,并给出了类似于 Did you mean: 'music'? 的提示,建议您检查一下您的代码,并修改该错误即可。您可以将 for music in musics: 改为 for music in music:,这样就可以正确地迭代到每个歌曲信息的列表中了。

你的循环语句(for music in musics),两个music顺序反了,把它们顺序改一下就可以了。