网易云音乐爬虫排行榜python
时间: 2025-01-24 11:50:55 浏览: 56
### 使用Python实现网易云音乐排行榜网页抓取
为了完成这一目标,可以采用`requests`库来发起HTTP请求获取页面数据,并通过`BeautifulSoup`库解析HTML文档。下面是一个具体的例子:
#### 准备工作
确保安装了必要的库:
```bash
pip install requests beautifulsoup4
```
#### 获取并解析网页内容
创建一个新的Python文件,在其中输入如下代码以初始化网络请求和初步的数据处理过程。
```python
import requests
from bs4 import BeautifulSoup
url = 'https://music.163.com/discover/toplist' # 网易云音乐排行榜链接
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url=url, headers=headers)
if response.status_code == 200:
html_content = response.text
else:
raise Exception(f"Failed to fetch the page with status code {response.status_code}")
# 解析HTML文档
toplist_soup = BeautifulSoup(html_content, 'html.parser')
print(toplist_soup.prettify()) # 打印美化后的HTML结构以便查看[^3]
```
这段脚本首先定义了一个指向网易云音乐排行榜的目标网址以及模拟浏览器访问所需的头部信息。接着向该地址发出GET请求,并检查返回的状态码是否正常(即等于200)。如果成功,则继续执行后续操作;否则抛出异常提示失败原因。最后一步是调用`BeautifulSoup`对象对响应体中的文本进行解析,形成易于遍历的树形结构用于进一步的信息抽取。
#### 提取所需信息
接下来可以根据实际需求定位到特定标签内的内容,比如提取榜单上每首歌的名字、歌手名等字段。这里给出一个简单示范,假设要获取前几条记录作为测试目的:
```python
songs_list = []
for item in toplist_soup.find_all('div', class_='ttc'):
song_info = {}
try:
title_tag = item.select_one('.txt>.f-thide').get_text(strip=True)
artist_tags = item.select('.text span')
artists = ', '.join([artist.get_text().strip() for artist in artist_tags])
song_info['title'] = title_tag
song_info['artists'] = artists
songs_list.append(song_info)
except AttributeError as e:
continue
for idx, song in enumerate(songs_list[:5], start=1):
print(f"{idx}. Title: {song['title']} | Artists: {song['artists']}")
```
上述代码片段展示了如何遍历包含歌曲详情的部分DOM节点,从中抽取出标题和艺术家姓名两个属性存入字典中再加入列表保存起来。最终打印出前五项结果供验证正确性[^1]。
阅读全文