Python爬虫-selenium爬取网易云歌单

本文介绍了使用Python的Selenium库配合PhantomJS无头浏览器爬取网易云音乐歌单信息的实战步骤,包括歌单名称、播放量和链接,并讨论了如何应对网易云的反爬策略,如User Agent和frame框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)工欲善其事必先利其器-安装工具

Selenium

Selenium是一个强大的网络数据采集工具,其最初是为网站自动化测试而开发的。近几年,它还被广泛用于获取精确的网站快照,因为它们可以直接运行在浏览器上。Selenium 库是一个在WebDriver 上调用的API。WebDriver 有点儿像可以加载网站的浏览器,但是它也可以像BeautifulSoup对象一样用来查找页面元素,与页面上的元素进行交互(发送文本、点击等),以及执行其他动作来运行网络爬虫。安装方式与其他Python第三方库一样。
pip install Selenium

浏览器

Selenium 自己不带浏览器,它需要与第三方浏览器结合在一起使用。例如,如果你在Firefox 上运行Selenium,可以直接看到一个Firefox 窗口被打开,进入网站,然后执行你在代码中设置的动作。虽然这样可以看得更清楚,但不适用于这个爬虫程序,爬一页就打开一页效率太低,所以我用一个叫PhantomJS的工具代替真实的浏览器。
PhantomJS:是一个“无头”(headless)浏览器。它会把网站加载到内存并执行页面上的JavaScript,但是它不会向用户展示网页的图形界面。把Selenium和PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫。
官方网站下载:http://phantomjs.org/download.html
然后把可执行文件拷贝到Python安装目录的Scripts文件夹。

(二)实战

1.爬取歌单的名字,播放量,链接放入一个csv文件;
2.将歌单封面和歌单中的歌曲下载到文件中。
网易云站外播放器链接:http://music.163.com/song/media/outer/url?id=
加上歌曲id号即可以获取歌曲,如:http://music.163.com/song/media/outer/url?id=476592630.mp3

网易云歌单链接(第一页):https://music.163.com/#/discover/playlist/?order=hot&cat=全部&limit=35&offset=0
“F12”分析一下:
在这里插入图片描述
播放数nb (number broadcast):59340

封面 msk (mask):有标题(title)和url

同理,也可以找到“下一页”的url,最后一页的url是“javascript:void(0)”
在这里插入图片描述
这就可以做一个循环,来获取数据:

url="https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0"
while url!='javascript:void(0)':

网易云有反爬虫机制:
1.User Agent:
在这里插入图片描述
找到User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6801.400 QQBrowser/10.3.2960.400
如果是使用入门的requests,BeautifulSoup来爬取数据就需要添加headers,不然服务器会识别爬虫,获取不到数据;

headers={
   
   "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2714.400"}
html=requests.get(url,headers=headers)

2.frame框架:

网易云用了frame框架,使用BeautifulSoup的find()方法获取class和tag是获取不到数据的,只能使用xpath;
而这里使用Selenium,就直接使用switch_to.frame()方法;

先完成第1步:

from selenium import webdriver
import csv

#准备好储存数据的csv文件
csv_file=open("playlist.csv","a",newline="",encoding='utf-8')
writer=csv.writer(csv_file)
writer.writerow(['歌单名','播放量','链接'])

#歌单第一页
url="https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0"
#用PhantomJS接口创建一个Selenium的WebDriver
driver=webdriver.PhantomJS()

#解析每一页,到最后一页
while url!='javascript:void(0)':
    print("访问地址:",url)
    #用WebDriver加载界面
    driver
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值