背景与原理
网络爬虫(Web Crawler)是自动浏览网络并提取信息的程序,广泛应用于数据采集、索引构建等场景。理解其基本流程有助于编写更高效的脚本。
爬虫的基本原理
- 种子 URL:从一个或多个起点开始。
- 发送请求:通常是 HTTP GET 请求。
- 获取响应:服务器返回 HTML 内容。
- 解析内容:提取文本、链接或图片。
- 提取链接:将新发现的链接加入队列。
- 重复过程:直到达到停止条件。
合法性与道德
在开发过程中必须遵守以下原则:
- 遵守 robots.txt:尊重网站对爬取范围的限制。
- 避免过度抓取:控制频率,防止给服务器造成负担。
- 尊重版权和隐私:不抓取受保护内容或用户隐私数据。
- 获取许可:大规模抓取前最好获得管理员同意。
网络请求分析
打开目标页面后,使用浏览器开发者工具(F12)定位关键元素。通过 Network 面板刷新页面,搜索关键字,找到包含歌曲列表的接口。
观察请求头中的数据来源地址及请求方法,确认这是 AJAX 加载还是静态页面。通常我们需要模拟浏览器请求头来绕过简单的反爬机制。
代码实现
import os
import re
import requests
# 创建存储目录
folder = 'music'
if not os.path.exists(folder):
os.makedirs(folder)
# 请求网址
url = 'https://music.163.com/playlist?id=3778678'
# 伪造请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
# 发送请求
response = requests.get(url, headers=headers)
# 正则表达式提取数据
# r 前缀表示原始字符串,避免转义问题
# (\\d+): 捕获组,匹配一个或多个数字
# (.*?): 非贪婪匹配,直到遇到 </a>
html_data = re.findall(r'<li><a href="/song\\?id=(\\d+)">(.*?)</a>', response.text)
# 遍历提取出的元组
for num_id, title in html_data:
# 构造音频下载链接
music_url =
music_content = requests.get(music_url, headers=headers)
(os.path.join(folder, title + ), ) f:
f.write(music_content.content)
(num_id, title)


