网易云音乐听歌量爬虫(免登陆版)

本文介绍了使用Python和Selenium构建的网易云音乐听歌量爬虫,详细阐述了如何在不登陆的情况下抓取听歌数据,包括环境搭建、URL获取、请求头设置、处理iframe框架、XPath定位元素和数据处理。虽然无法获取精确播放量,但对于一般用户,数据误差可忽略。
摘要由CSDN通过智能技术生成

  最近学习了一下爬虫的原理和基本的思路, 并且利用selenium + Python + Chrome 进行了一系列的爬虫.

  最开始的想法是, 想每天爬取自己网易云音乐的一些数据, 比如每天听歌量, 之类的.

  可以很轻松的利用selenium中的CSS selector 或者 XPath路径找到对应的HTML标签元素, 再通过鼠标等操作, 完成登陆, 进而爬取数据,

  但是, 后来发现网易云音乐的登陆有机器人检测, 在监视模式下无法通过selenium直接登陆. 参考了网上的各方意见之后, 找到解决的方法有两种:

    1. 通过get/post请求分析, 并修改header来提交表单完成登陆操作;(在requests模块中)

    2. 通过模拟鼠标移动来登陆(但听说这种方法现在也会直接被认定为机器人!)

  最终这个登陆问题也没有得到解决!!

  但是, 这并没有打消我爬虫的积极性. 所以就有了现在的免登陆爬虫:

  零、运行环境搭建:

    1. 运行环境

        我的爬虫是在win7下运行的,用到的爬虫软件有:

          ChromeDriver 70.0.3538.67

          Python 3.7.0

          Selenium 3.14.1

        当然, 如果你和我一样, 也是Firefox的忠实粉丝, 我也为你做了测试:

          geckodriver-v0.23.0-win64

          Firefox 60.0.1

          Python 3.7.0

          Selenium 3.14.1

        这么做的目的主要是因为, 一开始不知道Firefox也有headless模式(无头), 所以专门下载的Chrome.

    2. 爬虫部署:

        Win7下: 可以使用任务计划程序来定制爬虫; 我使用的是一个叫Ontimer的软件, 可以一键设置和管理所有自定义的计划, 并实现后台静默运行;

        Linux下: 我的服务器是CentOS6.9, 比较难搭建运行环境, 如果是CentOS7的操作系统, 可以使用crontab来部署你的爬虫!

  一、 取得并分析URL地址:

        取得的URL地址如:https://music.163.com/#/user/songs/rank?id=你的网易云音乐ID

        上面id=, 可以通过找到你的个人主页来得到(也可以修改id来访问别人的主页)

  二、设置请求头:

# 设置Chrome请求头(无头模式):
options = webdriver.ChromeOptions()
options.add_argument('--headless')

options.add_argument('lang=zh_CN.UTF-8') # 设置中文
options.add_argument('disable-infobars') #隐藏"Chrome正在受到自动软件的控制"
options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
    # 更换头部
user_agent = (
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " +
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
    )
options.add_argument('user-agent=%s'%user_agent)

        这个是Chrome浏览器请求头设置的代码, 如果你用的是Firefox浏览器:

# 设置Chrome请求头(无头模式):
options = webdriver.FirefoxOptions()
options.add_argument('-headless')

options.add_argument('lang=zh_CN.UTF-8') # 设置中文
options.add_argument('disable-infobars') #隐藏"Chrome正在受到自动软件的控制"
options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
    # 更换头部
user_agent = (
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) " +
    "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36"
    )
options.add_argument('user-agent=%s'%user_agent)

        基本和Chrome一致.

        如果很不幸, 你用的是PhantomJS或者其他的浏览器驱动, 我这里并没有配置header的代码;

        (其实我是有PhantomJS配置的代码的, 但是由于听说PhantomJS要停止维护了, 所以在这里就不写了! 有需要的朋友请自行百度)

  三、配置并请求链接:

        browser = webdriver.Chrome(chrome_options=options)
        browser.get("https://music.163.com/#/user/songs/rank?id=" + user_id)

        在这里, 我通过一个str类型的变量user_id来实现了访问网易云音乐不同用户的页面;

  三'、预处理:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值