Python爬虫:网易云音乐评论爬取

0x00 写在前面

这次的网易云音乐评论爬取跟ctfhub登录+签到一样,算是一次实战吧,也算是把这几天学习到的给真正拿来运用了,在这期间呢也确实又学到了新的知识,也对之前学的selenium的知识做了巩固。

0x01 iframe处理

先来看网页源码
在这里插入图片描述
这里采用了iframe来构造页面,当我们单纯显示网站源码时,iframe里的东西我们时看不到的,所以我这里采用了selenium的switch_to.frame来切换到iframe页面进行元素的定位和信息的填写

	url = "https://music.163.com/#/search/m/"
    driver.get(url)
    driver.switch_to.frame('g_iframe')#切换到iframe部分
    sleep(1)
    driver.find_element_by_id('m-search-input').send_keys(user)#找到输入框并输入信息
    driver.find_element_by_id('m-search-input').send_keys(Keys.ENTER)

回到网站,我是想搜索用户并访问其主页,再获取用户自己创建的歌单列表和歌单网址的列表,所以我们先去获得用户主页的网址,还是先去看看网页
在这里插入图片描述

在这里插入图片描述

显然我们可以通过id搜索来确定输入框,接着我偷了个懒没有管搜索的按钮,而是直接在输入框输入enter来达到目的。最后,我们还要点击用户按钮来使得我们的搜索显示的是用户以及用户主页,最后获得table元素即可
从而,getUser函数完整代码如下:

def getUser(user, driver):#user是要搜索的用户名,driver是我们的浏览器驱动
    url = "https://music.163.com/#/search/m/"
    driver.get(url)
    driver.switch_to.frame('g_iframe')#根据iframe的id切换到iframe部分
    sleep(1)
    driver.find_element_by_id('m-search-input').send_keys(user)#向搜索框中输入用户名
    driver.find_element_by_id('m-search-input').send_keys(Keys.ENTER)#输入enter,代表开始搜索
    driver.find_element_by_xpath('//*[@class="m-tabs m-tabs-srch f-cb ztag"]/li[8]').click()#点击网页中的用户按钮,改变table的值
    sleep(1)
    tab = driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div/table/tbody')#获得table内的元素
    users = tab.find_elements_by_tag_name('a')#从table中分离出包含有用数据的所有标签
    list = []
    for i, n in enumerate(users):
        if (i - 1) % 3 == 0:
            tu = (n.get_attribute('title'), n.get_attribute('href'))
            list.append(tu)#通过循环把所有的用户id和对应主页url成对放在列表list里
    for i, n in enumerate(list):
        print('[' + str(i) + ']\t' + n[0] + '\t' + n[1])#打印list
    num = input('请输入用户对应序号:')#输入对应想要查看的用户
    return list[int(num)]#返回该用户的url以及用户id,即(id,url)元组

0x02 获取歌单

获取到了用户的url,接下来我们就要获取对应用户的歌单列表,这里我偷了个懒,只获得用户自己创建的歌单,先来看看网页

在这里插入图片描述
又是一个iframe,其中,用户自己创建的歌单在id为cbox的ul里,这里就跟搜索用户一样,直接上代码

def getSongs(user, driver):
    driver.get(user[1])#打开对应网页
    sleep(1)
    driver.switch_to.frame('g_iframe')#移动到iframe里
    box = driver.find_element_by_xpath('//*[@id="cBox"]')#找到歌单所在位置
    li = box.find_elements_by_tag_name('a')#找到里面包含歌单名和url的标签
    list = []
    for i, n in enumerate(li):
        if i % 3 == 0:
            tu = (n.get_attribute('title'), n.get_attribute('href'))
            list.append(tu)#循环写把歌单和url成对写入列表里
    print(user[0] + '创建的歌单如下:')
    for i, n in enumerate(list):
        print('[' + str(i) + ']\t' + n[0] + '\t' + n[1])#打印列表
    num = input('请选择对应歌单:')#输入序号选择
    return list[int(num)]

0x03 获取歌曲

打开了歌单网页,接下来就是获取歌曲名和对应url了,代码写到这里的时候我才发现网页上只能显示前20首歌,自己登陆了看自己的歌单能看前1000首…所以我在这里又多写了一个登陆的代码块

登陆按钮位置:
在这里插入图片描述
对登录弹框的处理(这里我选的是手机登录):
在这里插入图片描述
在这里插入图片描述
别忘了要先勾选同意条款:
在这里插入图片描述
接着输入账号密码:
在这里插入图片描述
就能登录成功了,其实这一步可以省略,因为这步只是让我们爬取自己的歌单的时候可以爬到更多的信息…

接下来是歌曲的获取部分,位置如图(这里图方便我就只获得了歌曲名,没有去多获取歌手名,其实影响不大):

在这里插入图片描述

ok,位置都找到了,接下来就是写代码了

def getSong(driver, songsname):
    sleep(
  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值