1.抓取QQ音乐网站热歌榜数据,网址:https://y.qq.com/n/ryqq/toplist/26 要求: (1)抓取的字段包括:歌曲名称,歌曲链接,歌手,时长。 (2)请使用正则表达式提取以上信息。
时间: 2024-06-10 21:04:17 浏览: 184
daohang.rar_88daohang_com.dhmob.daohang_https://daohang.qq._qq j
好的,您的第一个问题是如何抓取QQ音乐网站热歌榜数据并且提取歌曲名称,歌曲链接,歌手和时长。
以下是Python代码示例,使用正则表达式实现:
```python
import requests
import re
url = 'https://y.qq.com/n/ryqq/toplist/26'
response = requests.get(url)
song_list = re.findall(r'<td class="songlist__songname">.*?title="(.*?)".*?data-mid="(.*?)">.*?</a>.*?<td class="songlist__artist">.*?title="(.*?)">', response.text, re.S)
duration_list = re.findall(r'<td class="songlist__time">(.*?)</td>', response.text, re.S)
for i in range(len(song_list)):
song_name = song_list[i][0]
song_link = 'https://y.qq.com/n/yqq/song/' + song_list[i][1] + '.html'
artist = song_list[i][2]
duration = duration_list[i]
print('歌曲名称:' + song_name)
print('歌曲链接:' + song_link)
print('歌手:' + artist)
print('时长:' + duration)
```
解释一下代码中的正则表达式:
- 第一个正则表达式用于提取歌曲名称,歌曲链接和歌手信息。其中,`.*?` 表示非贪婪模式匹配任意字符,`.*?title="(.*?)"` 表示匹配 `title=` 和 `"` 之间的内容作为歌曲名称,`data-mid="(.*?)"` 表示匹配 `data-mid=` 和 `"` 之间的内容作为歌曲链接中的 `mid` 值,`.*?title="(.*?)"` 表示匹配歌手名称。
- 第二个正则表达式用于提取歌曲时长信息,它匹配 `<td class="songlist__time">` 和 `</td>` 之间的内容。
在运行完这段代码后,会输出每一首歌曲的名称、链接、歌手和时长信息。希望能够对您有所帮助,还有其他问题可以继续问我。
阅读全文