Python 爬虫 001 :网易云音乐歌单

2018-11-06  本文已影响0人  左手右岸

目标:

抓取网易云音乐中播放量在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 时携带的解释器)

image.png
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

是不是注意到了“下一页”这个按钮?

image.png

我们点击下一页,加载页面,直到最后一页不就能够访问所有的歌单了,我们在代码中完全可以通过一个循环来完成一步。
那么,我们该怎么停止循环呢。

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()


结束语:

刚开始学习爬虫,全都是看的各位大佬文章,谢谢分享知识的每一个人。

[原创]手把手教你写网络爬虫(1):网易云音乐歌单

上一篇下一篇

猜你喜欢

热点阅读