爬取网易云歌单里面音乐列表

"""
爬取网易云歌单里面音乐列表
"""
import re
import xlwt
import xlrd
import xlutils.copy
# 将复制到的源码放在一个html文件里面 以rb格式读入
with open('3.html', 'rb') as f:
    # 读取之后需要进行解码
    html = f.read().decode('utf-8')
# 使用第一次匹配获取一收歌曲的全部信息
pattern = r'<tr.+?</tr>'
# 设定flags = re.S 匹配包括换行符在内的所有字符
res_list = re.findall(pattern=pattern, string=html, flags=re.S)
# 可以输出匹配到的结果的长度 核对是否匹配完整
print(len(res_list))
# print(res_list[0])
# 用来保存歌曲名和作者名的数组
name_author_list = []
# 同时匹配歌曲名和作者名的正则表达式
name_author_pattern = r'data-res-name="(.+?)".+?data-res-author="(.+?)"'
# 从每首歌曲中匹配出需要的信息
for item in res_list:
    name_author_list.extend(re.findall(pattern=name_author_pattern, string=item, flags=re.S))
# 打印结果核对
print(name_author_list[0])
# print(len(name_author_list))
# 创建excel工作空间
data = xlrd.open_workbook('歌单.xls')
ws = xlutils.copy.copy(data)
# workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
# 创建sheet对象
sheet = ws.add_sheet('sheet3', cell_overwrite_ok=True)
sheet.write(0, 0, '歌名')
sheet.write(0, 1, '作者')
# 将匹配到的结果写入excel
for index, item in enumerate(name_author_list):
    sheet.write(index + 1, 0, name_author_list[index][0])
    sheet.write(index + 1, 1, name_author_list[index][1])
ws.save(r'歌单.xls')

### 使用 Python 爬虫抓取网易云音乐歌单数据 为了实现这一目标,可以采用 `requests` 和 `BeautifulSoup` 库来发送 HTTP 请求并解析返回的内容。对于更复杂的交互逻辑或者动态加载内容的情况,则可能需要用到像 Selenium 这样的工具模拟浏览器行为。 #### 准备工作 安装必要的库可以通过 pip 完成: ```bash pip install requests beautifulsoup4 lxml selenium ``` #### 获取网页源码 利用 `requests.get()` 方法向指定 URL 发送 GET 请求以获得响应对象,再调用 `.text` 属性读取出 HTML 文本字符串形式的页面源代码[^2]。 #### 解析HTML结构 创建 BeautifulSoup 对象时传入上述获取到的 html 字符串以及所使用的解析器(这里推荐使用 'lxml'),之后便可以根据标签名称、属性等方式定位所需元素位置,并提取其中的文字信息或链接地址等有用部分。 #### 处理反爬机制 由于网站通常会设置各种措施防止被频繁访问造成服务器压力过大甚至崩溃,因此建议适当加入延时操作避免触发封禁IP的风险;另外还可以考虑更换 User-Agent 模拟正常用户的浏览习惯,提高成功率[^3]。 #### 数据存储与展示 最后一步就是将收集来的资料按照一定格式保存下来供后续分析处理或是直接用于可视化呈现给用户查看了。这一步骤可根据个人需求灵活调整[^1]。 ```python import time from bs4 import BeautifulSoup import requests 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' } def get_playlist_data(url): response = requests.get(url=url, headers=headers) soup = BeautifulSoup(response.text, 'lxml') # 假设我们要找的是所有歌曲的名字和歌手名 songs_info = [] for item in soup.select('.m-table .txt'): song_name = item.a['title'] artist_name = item.p.span['title'] if item.p and item.p.span else '' songs_info.append({ "song": song_name, "artist": artist_name }) time.sleep(0.5) return songs_info if __name__ == '__main__': playlist_url = input('请输入要抓取的网易云音乐歌单URL:') result = get_playlist_data(playlist_url) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值