import requests # 发送请求 import re url = 'https://music.163.com/discover/toplist?id=3779629' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.41'} response = requests.get(url,headers=headers)#请求成功 获取数据 html_data=response.text info_list_=re.findall('<li><a href="/song\?id=(.*?)">(.*?)</a></li>',html_data)#?:非贪婪匹配 for music in info_list_: # print(music[0],music[1]) # music.add(music[0],music[1]) id=music[0] name=music[1] music=[id,name] with open('D:/桌面/爬虫期末/music.text','w',encoding='utf-8')as fp: fp.write(str(music)),为什么只有一条数据
时间: 2024-04-04 18:34:48 浏览: 49
TAIEX数据:可从https://www.twse.com.tw获取Json原始数据
在你的代码中,文件写入操作只进行了一次,而且每次写入的都是最后一条歌曲信息。这是因为每次循环都会覆盖之前写入的内容,最终只剩下最后一条歌曲的信息。为了解决这个问题,你可以将写入操作放在循环内部,并且使用 'a' 模式打开文件,这样每次写入都会追加到文件末尾,而不会覆盖之前写入的内容。同时,你可能需要将写入的数据转换成字符串并添加换行符,以便区分不同歌曲的信息。修改后的代码如下:
```
import requests
import re
url = 'https://music.163.com/discover/toplist?id=3779629'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.41'}
response = requests.get(url,headers=headers)
html_data = response.text
info_list = re.findall('<li><a href="/song\?id=(.*?)">(.*?)</a></li>', html_data)
with open('D:/桌面/爬虫期末/music.txt', 'a', encoding='utf-8') as fp:
for music in info_list:
id = music[0]
name = music[1]
music_str = ','.join([id, name]) + '\n'
fp.write(music_str)
```
这样就可以将所有歌曲信息写入到文件中了。
阅读全文