Python小应用系列之迷你爬虫之15行代码搞定热门歌单

Python小应用系列之迷你爬虫之15行代码搞定热门歌单

1 引言

今天是国际著名的214情人节,你过的是情人节还是正月初十呢?是否需要一首歌来抚慰你,受伤或躁动的心灵。来吧,今天教你用15行代码搞定热门歌单。学起来并听起来吧。

本文使用的是Selenium模块,它是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,对于一些 JavaScript 渲染的页面来说,此种抓取方式非常有效。另外采用了Chrome浏览器配合Selenium工作。

2 环境

操作系统:Windows

Python版本:3.7.2

3 准备工作

3.1、若你的环境中没有selenium模块,直接使用pip安装即可。

pip install selenium

3.2、打开谷歌浏览器,检查Chrome的版本:

在浏览器地址中输入 chrome://settings/help 回车即可看到。

3.3、准备ChromeDriver

打开ChromeDriver 的官方网站:https://sites.google.com/a/chromium.org/chromedriver/downloads ,寻找与你当前浏览器版本相对应的ChromeDriver下载。

3.4、选择你自己的操作系统类型进行下载即可。

3.5、以Windows为例,下载结束后,将ChromeDriver 放置在python安装目录下的Scripts文件夹即可。

准备工作完成,代码写起来吧~

4 迷你爬虫的实现

我们这次的目标是爬取热门歌单,比如网易云音乐中播放量大于1000万的歌单信息(歌单名称、链接)。

4.1、我们先来打开网易云的歌单第一页:

https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0

4.2、使用Chrome的开发者工具F12进行分析。

我们想要拿的信息全在这里:

msk,封面[mask]:有歌单的名称及链接

nb,播放数[number broadcast]:135万

4.3、我们还需要遍历所有的页,使用工具继续分析,找到“下一页”的URL。

4.4、切换至最后一页,拿到最后一页的URL。

4.5、等我们爬取完所有符合的歌单信息后,将其保存在本地。
4.6、全部工作结束,最后再通过下面的伪代码回顾下整体思路。
from selenium import webdriver

# 网易云音乐歌单列表第一页地址
url = '163muisc'
# 用Chrome接口创建一个Selenium的WebDriver
browser = webdriver.Chrome()

# 逐页解析,直至歌单列表的最后一页
while url != 'javacript:void(0)':
    # 用WebDriver加载页面
    browser.get(url)
    # 切换至内容的iframe
    browser.switch_to.frame("")
    # 定位歌单标签
    data = browser.find_element_by_id("").find_elements_by_tag_name("")
    # 解析当前页中所有的歌单详情
    for i in range(len(data)):
        # 获取歌单的播放量
        num = data[i].find_element_by_class_name("nb").text
        if '万' in num and int(num.split('万')[0]) > 1000:
            # 获取播放量大于1000万的歌单封面
            msk = data[i].find_element_by_css_selector("")
            # 把歌单封面中的标题、链接以及播放量,存储在TXT文件中
            with open("163playlist.txt", 'a') as f:
                f.write(['msk.title', 'msk.num', 'msk.href'])
    # 定位'下一页'的URL
    url = browser.find_element_by_css_selector("").get_attribute("") 

# 结束调用
browser.close()
4.7、爬取的效果如下:

5 总结

本文旨在安抚你因情人节受伤的小心灵,同时带你入个爬虫的门,感受下python的强大。本文所涉及的完整代码详见HGzhao/PythonApps

备注:本篇首发于知识星球「人人都是Pythonista」。


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
 上一篇
Python小应用系列之用Python爬取 Python小应用系列之用Python爬取"农药"英雄皮肤
用Python爬取"农药"英雄皮肤。短短几十行代码就可以把心爱英雄的精美皮肤保存下来,赶快实操起来吧!
下一篇 
Python小应用系列之用Python写个邮件提醒 Python小应用系列之用Python写个邮件提醒
新年开工第二天了,还不想工作?偷个懒又不想错过重要事情被老板逮个正着,这时邮件提醒就派上用场了。
  目录