import requests from bs4 import BeautifulSoup import time headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 " "Safari/537.36 Edg/113.0.1774.42" } def get_info(url): wb_data = requests.get(url, headers=headers) soup = BeautifulSoup(wb_data.text, 'lxml') ranks = soup.select('span.pc_temp_num') titles = soup.select('div.pc_temp_songlist>ul>li>a') times = soup.select('span.pc_temp_tips_r>span') for rank, title, time in zip(ranks, titles, times): str1 = title.get_text().split('.') data = { 'rank': rank.get_text().strip(), 'singer': str1[0], 'song': str1[-1], 'time': time.get_text().strip() } print(data) if __name__ == '__main__': urls = ["https://www.kugou.com/yy.rank/home{}.8888.html".format(str(i)) for i in range(1, 30)] for url in urls: get_info(url) time.sleep(2)print(data) UnboundLocalError: local variable 'data' referenced before assignment
时间: 2023-06-27 12:07:05 浏览: 62
这个错误是因为 `data` 变量没有被正确地初始化。在 `get_info` 函数中,`data` 变量只在循环内部被定义,因此如果没有任何一次循环被执行,那么在函数结束时它仍然不存在。如果你想在循环外部使用 `data` 变量,你需要在函数开始时先将其初始化为空字典,如下所示:
```
def get_info(url):
wb_data = requests.get(url, headers=headers)
soup = BeautifulSoup(wb_data.text, 'lxml')
ranks = soup.select('span.pc_temp_num')
titles = soup.select('div.pc_temp_songlist>ul>li>a')
times = soup.select('span.pc_temp_tips_r>span')
data = {}
for rank, title, time in zip(ranks, titles, times):
str1 = title.get_text().split('.')
data = {
'rank': rank.get_text().strip(),
'singer': str1[0],
'song': str1[-1],
'time': time.get_text().strip()
}
print(data)
```
这样,即使没有任何一次循环被执行,`data` 变量也会被定义为空字典,从而避免了 `UnboundLocalError` 错误的发生。