网易云音乐歌曲爬虫
时间: 2025-05-09 20:08:21 浏览: 21
### 使用 Scrapy 和 Requests 抓取网易云音乐歌曲数据
#### 背景介绍
Scrapy 是一个强大的 Python 开源爬虫框架,适用于快速、高效地从网站上抓取和提取结构化数据[^1]。Requests 则是一个轻量级的 HTTP 请求库,常用于简单的 GET/POST 请求操作[^2]。
对于网易云音乐这样的平台,其页面通常由 JavaScript 动态加载内容,因此直接通过传统的 HTML 解析方法可能无法获取到所需的数据。以下是实现网易云音乐歌曲数据抓取的一种可行方案:
---
#### 方法概述
为了成功抓取网易云音乐上的歌曲数据,可以采用以下策略:
1. **分析目标站点**:研究网易云音乐 API 的请求方式以及返回的数据格式。
2. **模拟请求行为**:利用 `requests` 或其他工具发送带有适当参数的 POST 请求来获取 JSON 响应。
3. **解析响应数据**:处理接收到的 JSON 数据并从中提取所需的字段(如歌名、歌手等)。
4. **存储结果**:将最终获得的信息保存至文件或者数据库中以便后续使用。
下面提供一段基于上述思路编写的具体代码示例:
```python
import requests
from urllib.parse import urlencode
def get_songs(keyword, limit=10):
url = 'https://music.163.com/api/search/get/web'
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'),
'Referer': 'http://music.163.com/'
}
params = {
's': keyword,
'type': 1, # type=1 表示搜索歌曲
'offset': 0,
'limit': limit
}
response = requests.get(url=url, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
songs_list = []
try:
for song in data['result']['songs']:
name = song['name']
artists = ','.join([artist['name'] for artist in song['artists']])
album_name = song['album']['name']
songs_list.append({
'song_name': name,
'artists': artists,
'album': album_name
})
return songs_list
except KeyError as e:
print(f'Error occurred while parsing the json: {e}')
else:
print('Failed to fetch data from server.')
if __name__ == '__main__':
search_keyword = input("请输入要查询的关键词:")
results = get_songs(search_keyword)
if isinstance(results, list) and len(results)>0:
for idx,result in enumerate(results,start=1):
print(f"{idx}. Song Name:{result['song_name']} | Artists:{result['artists']} | Album:{result['album']}")
```
此脚本实现了基本功能——根据给定关键字检索相关联的若干首歌曲及其基本信息展示出来。需要注意的是实际部署过程中还需要考虑更多细节比如异常情况下的重试机制等等。
---
#### 注意事项
- 网易云音乐有严格的反爬措施,在开发前需仔细阅读官方文档了解合法合规的方式访问接口资源[^3]。
- 频繁的大规模爬取可能会触发封禁 IP 地址等问题,建议合理控制频率,并设置随机延时减少被检测风险[^4]。
---
阅读全文
相关推荐

















