目标:
抓取网易云音乐中播放量在1000万以上的歌单信息(标题、封面、播放量、链接)
image.png
image.png
工具:
1、Python3
2、PyCharm CE 用于编写Python代码
3、Selenium 一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
4、headless Chrome(谷歌无头浏览器)。在 Chrome 59 中开始搭载 Headless Chrome。这是一种在无需显示的环境下运行 Chrome 浏览器的方式。从本质上来说,就是不用 chrome 浏览器来运行 Chrome 的功能!它将 Chromium 和 Blink 渲染引擎提供的所有现代 Web 平台的功能都带入了命令行。
5、chrome浏览器
安装:
本人使用的mac,所以只提及mac的安装方法
Python3 :
前往官网下载即可 https://www.python.org/downloads/
PyCharm CE:
同样前往官网下载 http://www.jetbrains.com/pycharm/download/#section=mac
Selenium:
https://www.jianshu.com/p/e50a49f86070 或 pip3 install selenium(引入时可能会提示找不到,解决方法:将pycharm ce 的 解释器切换为,下载python3 时携带的解释器)
headless Chrome:
我的Chrome版本是70.0.3538.77 下载安装Chromedriver便行了,将下载的文件解压移动到 usr/local/bin 即可 https://blog.csdn.net/ywj_486/article/details/80940087
第一步:用Chrome浏览器分析页面
在Chrome中可以很明显看到,每一个歌单我们所需要的信息都在html中。找到了需要采集的信息,只要提取出来就行了。
但是存在一个问题,这只是一个页面的内容,并不是全部。
是不是注意到了“下一页”这个按钮?
image.png我们点击下一页,加载页面,直到最后一页不就能够访问所有的歌单了,我们在代码中完全可以通过一个循环来完成一步。
那么,我们该怎么停止循环呢。
很明显,在最后一页,下一页的href="javascript:void(0)" 。
至此,我们有了完整的思路,开始上代码。
第二步:编写代码
from selenium import webdriver
import csv
#网易音乐第一页地址
url = 'http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0'
print(url)
#用chrome的接口创建一个selenium的webdriver
driver = webdriver.Chrome();
#准备存储歌单的csv文件
csv_file = open("playPlist.csv", "w", newline = "")
writer = csv.writer(csv_file)
writer.writerow(['标题','播放数','链接', '封面'])
while url != "javascript:void(0)" :
# 用webdriver加载网页内容
driver.get(url)
# 切换到iframe
driver.switch_to.frame("contentFrame")
# 定位到歌单
data = driver.find_element_by_id("m-pl-container").find_elements_by_tag_name("li")
# 解析一页中的所有歌单
for i in range(len(data)):
# 获取播放
nb = data[i].find_elements_by_class_name("nb")[0].text
if "万" in nb and int(nb.split("万")[0]) > 1000 :
# 获取封面
img = data[i].find_elements_by_css_selector("img.j-flag")[0]
# 获取标题
msk = data[i].find_elements_by_css_selector("a.msk")[0]
# 写入文件
writer.writerow([msk.get_attribute("title"), nb, msk.get_attribute("href"), img.get_attribute("src")])
# 定位下一页的url
next_page = driver.find_elements_by_css_selector("a.zbtn.znxt")
url = next_page[0].get_attribute("href")
print(url)
csv_file.close()
结束语:
刚开始学习爬虫,全都是看的各位大佬文章,谢谢分享知识的每一个人。
网友评论