美文网首页
Python 爬虫 001 :网易云音乐歌单

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

作者: 左手右岸 | 来源:发表于2018-11-06 13:44 被阅读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):网易云音乐歌单

    相关文章

      网友评论

          本文标题:Python 爬虫 001 :网易云音乐歌单

          本文链接:https://www.haomeiwen.com/subject/ljtuxqtx.html