Python 网络爬虫实战:使用 Requests 抓取音乐数据教程
引言
网络爬虫(Web Crawler)是自动化获取网页信息的技术。在数据分析、信息聚合等场景中,通过 Python 的 requests 库可以高效地模拟浏览器行为,获取目标网站的数据。本文将以音乐搜索与下载为例,演示如何使用 Python 发送 HTTP 请求、解析 JSON 数据并处理文件流。
注意:本教程仅用于技术学习与研究。在实际应用中,请遵守相关法律法规及目标网站的 robots.txt 协议,尊重版权,不要用于非法用途。
环境准备
- Python 版本:3.8 及以上
- 开发工具:PyCharm 或 VS Code
- 依赖库:
requests:用于发送 HTTP 请求prettytable:用于格式化输出表格
安装依赖命令:
pip install requests prettytable
核心思路分析
实现音乐搜索与下载功能主要分为两个步骤:
- 搜索功能:向目标 API 发送 GET 请求,传入关键词参数,解析返回的 JSON 数据,提取歌曲 ID、名称、歌手等信息。
- 下载功能:根据歌曲 ID 调用播放接口获取真实音频 URL,再发起请求下载二进制流并保存为本地文件。
代码实现
1. 搜索模块
首先定义搜索逻辑,包括设置请求头(Headers)以伪装浏览器身份,避免被服务器拦截。
from urllib.parse import quote
import requests
import prettytable as pt
# 用户输入搜索关键词
search_key = input('请输入你要搜索的歌曲或歌手名:')
# 对关键词进行 URL 编码,防止特殊字符导致请求错误
search_key = quote(search_key)
# 设置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36',
# 注意:实际 Cookie 可能随时间失效,建议动态获取或使用 Session
'Cookie': '_ga=GA1.2.1829952759.1632831324; BusinessId={...}; kw_token=SK7FZCBITOJ'
}
# 构造搜索接口 URL
url = f'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?key={search_key}&pn=1&rn=30'
:
response = requests.get(url=url, headers=headers, timeout=)
response.status_code == :
json_data = response.json()
data_list = json_data[][]
:
()
exit()
Exception e:
()
exit()
tb = pt.PrettyTable()
tb.field_names = [, , , ]
count =
info_list = []
data data_list:
rid = data[]
name = data[]
artist = data[]
album = data[]
tb.add_row([count, name, artist, album])
info_list.append([rid, name, artist])
count +=
(tb)


