爬虫爬取网易云歌手id
时间: 2025-01-15 14:23:44 浏览: 45
### 使用Python爬虫抓取网易云音乐歌手ID
为了实现从网易云音乐网站抓取歌手ID的功能,可以采用Scrapy框架来构建爬虫程序。以下是具体的操作方法:
#### 创建Scrapy项目
首先,在命令行工具中输入`scrapy startproject MusicSpider`创建一个新的Scrapy工程[^1]。
```bash
scrapy startproject MusicSpider
```
这将在当前工作目录下生成名为MusicSpider的新文件夹,其内部结构遵循标准的Scrapy项目布局。
#### 编写Items定义
接着编辑位于`items.py`中的模型类,用于表示要采集的数据项。对于本案例而言,只需关注两个字段——歌曲名称(`name`)以及演唱者姓名(`singer`)即可满足需求[^3]。
```python
import scrapy
class SingerIdItem(scrapy.Item):
id = scrapy.Field()
name = scrapy.Field()
```
这里新增了一个`id`属性专门用来存储目标页面上的唯一标识符即歌手ID。
#### 修改Settings设置
打开并调整`settings.py`里的参数选项,确保能够高效稳定地执行任务。例如适当增加下载延时减少服务器压力;开启日志记录便于调试错误等操作。
```python
# 下载中间件配置
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
# 自定义User-Agent字符串模拟浏览器访问
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
# 启用自动限流机制防止被封禁IP地址
AUTOTHROTTLE_ENABLED = True
```
#### 开发Spiders逻辑
最后一步是在`sipders`子包内建立具体的爬虫模块,负责解析HTML文档定位所需信息位置,并调用之前声明过的item实例填充实际值完成入库流程。考虑到网易云音乐API接口的存在,可以直接通过HTTP请求获取JSON格式响应体内的数据而无需依赖复杂的DOM树遍历算法简化开发难度[^2]。
```python
import json
import scrapy
from ..items import SingerIdItem
class NetEaseCloudSpider(scrapy.Spider):
name = 'netease_cloud'
allowed_domains = ['music.163.com']
base_url = f"https://api.imjad.cn/cloudmusic/?type=toplist&id="
def parse(self, response):
data = json.loads(response.text)
artists = data.get('artists', [])
for artist in artists:
item = SingerIdItem()
item['id'] = str(artist.get('id'))
item['name'] = artist.get('name')
yield item
def start_requests(self):
urls = [
self.base_url + str(i) for i in range(1, 10)
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
```
上述脚本实现了向第三方提供的非官方API发送GET请求读取榜单详情页里包含的所有艺人资料片段,再逐一映射至对应的实体对象最终提交给管道组件做进一步加工处理。
阅读全文
相关推荐


















