**

python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

**
一、访问网易云首页,找到所需元素的位置
用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的登录就在网页的右上角如图一,但是又有很多登录选项没有列出来,只有鼠标移动到登录按钮的位置并点击才会显示出来如图二。


这里我们选择手机号登录

def login(id, passwd):url = 'https://music.163.com/'browser = webdriver.Chrome()browser.get(url)time.sleep(5)  # 等待5秒,待界面完全加载element = browser.find_element_by_xpath('//div[@class="m-tophead f-pr j-tflag"]')ActionChains(browser).move_to_element(element).perform()s1 = '//div[@class="m-tophead f-pr j-tflag"]/div/div/ul/li/a/em'  # 手机登录标签的Xpathbrowser.find_element_by_xpath(s1).click()  # 点击手机登录time.sleep(3)browser.find_element_by_name('p').clear()browser.find_element_by_name('p').send_keys(id) # 输入用户账户browser.find_element_by_name('pw').clear()browser.find_element_by_name('pw').send_keys(passwd) # 输入用户密码browser.find_element_by_xpath('//div/a[@class="j-primary u-btn2 u-btn2-2"]').click() # 点击登录

二、跳转至指定歌曲界面并爬取评论
我选取的是《盗将行》这首歌,程序运行如下图:

将所有的评论内容,用户名,用户ID和被赞次数保存成csv文件。
三、附源码

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import random
import mathdef login(id, passwd):url = 'https://music.163.com/'browser = webdriver.Chrome()browser.get(url)time.sleep(5)  # 等待5秒,待界面完全加载element = browser.find_element_by_xpath('//div[@class="m-tophead f-pr j-tflag"]')ActionChains(browser).move_to_element(element).perform()s1 = '//div[@class="m-tophead f-pr j-tflag"]/div/div/ul/li/a/em'  # 手机登录标签的Xpathbrowser.find_element_by_xpath(s1).click()  # 点击手机登录time.sleep(3)browser.find_element_by_name('p').clear()browser.find_element_by_name('p').send_keys(id) # 输入用户账户browser.find_element_by_name('pw').clear()browser.find_element_by_name('pw').send_keys(passwd) # 输入用户密码browser.find_element_by_xpath('//div/a[@class="j-primary u-btn2 u-btn2-2"]').click() # 点击登录def start_spider(url):"""启动Chrome浏览器访问页面"""brower = webdriver.Chrome()brower.get(url)# 等待5s,让评论加载完毕time.sleep(5)# 页面嵌套一层iframe,必须切换到iframe,才能定位到iframe里面的元素iframe = brower.find_element_by_class_name('g-iframe')brower.switch_to.frame(iframe)# 获取【最新评论】总数new_comments = brower.find_elements_by_xpath("//h3[@class='u-hd4']")[1]max_page = get_max_page(new_comments.text)print("================")print(max_page)# 接着循环抓取评论数据,首先抓取第1页的评论数据current = 1is_first = Truewhile current <= max_page:print('正在爬取第', current, '页的数据')if current == 1:is_first = Trueelse:is_first = Falsedata_list = get_comments(is_first, brower)savef_data_to_mongo(data_list)time.sleep(1)go_nextpage(brower)time.sleep(random.randint(8, 12))current += 1# 根据评论总数计算出总分页数def get_max_page(new_comments):"""根据评论总数计算出总页数"""print('===' + new_comments + '===')max_page = new_comments.split('(')[1].split(')')[0]# 每页显示20条最新评论offset = 20max_page = math.ceil(int(max_page) / offset)print('总共有', max_page, '页')return max_pagedef get_comments(is_first, brower):"""获取评论数据"""items = brower.find_elements_by_xpath("//div[@class='cmmts j-flag']/div[@class='itm']")# 首页的数据中包含15条精彩评论,20条最新评论,只保留最新评论if is_first:items = items[15: len(items)]data_list = []data = {}for each in items:# 用户iduserId = each.find_elements_by_xpath("./div[@class='head']/a")[0]userId = userId.get_attribute('href').split('=')[1]# 用户昵称nickname = each.find_elements_by_xpath("./div[@class='cntwrap']/div[1]/div[1]/a")[0]nickname = nickname.text# 评论内容content = each.find_elements_by_xpath("./div[@class='cntwrap']/div[1]/div[1]")[0]content = content.text.split(':')[1]  # 中文冒号# 点赞数like = each.find_elements_by_xpath("./div[@class='cntwrap']/div[@class='rp']/a[1]")[0]like = like.textif like:like = like.strip().split('(')[1].split(')')[0]else:like = '0'# 头像地址avatar = each.find_elements_by_xpath("./div[@class='head']/a/img")[0]avatar = avatar.get_attribute('src')data['userId'] = userIddata['nickname'] = nicknamedata['content'] = contentdata['like'] = likedata['avatar'] = avatarprint(data)data_list.append(data)data = {}return data_listdef savef_data_to_mongo(data_list):"""一次性插入20条评论。插入效率高,降低数据丢失风险"""data_list = str(data_list)with open("网易评论.csv", "a", encoding='gbk') as file:file.write(data_list)print('成功插入', len(data_list), '条数据')def go_nextpage(brower):"""模拟人为操作,点击【下一页】"""next_button = brower.find_elements_by_xpath("//div[@class='m-cmmt']/div[3]/div[1]/a")[-1]if next_button.text == '下一页':next_button.click()if __name__ == '__main__':id = '' # 用户IDpasswd = '' # 用户密码login(id,passwd)url = 'https://music.163.com/#/song?id=574566207'start_spider(url)

python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论相关推荐

  1. 利用Python网络爬虫实现对网易云音乐歌词爬取

    今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本地 ...

  2. 网易云评论 爬虫 java_网易云音乐资源爬取(登录+评论)

    如何爬取网易云音乐的评论呢? 1.文本以华晨宇的<我的滑板鞋2016>为例 2.使用浏览器的工具,查找获取评论的url 3.不难发现,此API是通过POST请求获得我们想要的评论信息的,需 ...

  3. Python爬虫-网易云音乐自动化爬取下载

    文章目录 前言 爬取分析 完整代码 爬取效果 拓展代码 前言 上一篇简述了如何使用 Python 爬虫自动爬取CSDN博客排行榜数据并自动整理成Excel文件,这篇文章来看看如何自动化爬取网易云音乐的 ...

  4. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!

    今天,我们利用Python 中的selenium爬取网易云音乐中林俊杰<将故事写成我们>的评论,具体界面如下: 私信小编01 获取数十套PDF!爬虫 web都有的呢! 具体代码如下: #此 ...

  5. python爬取网易云音乐_爬取网易云音乐评论(一)——用python执行JS脚本

    抓包分析 可以发现网页是post请求,表单数据有两个参数params和encSecKey,应该是经过js加密所得 因此在 Initiator 栏里找到对应的js,也就是core...js,点击打开查看 ...

  6. 从高可用IP代理池到千万级网易云音乐数据爬取的实现

    博客引流 首先 ㊗️大家 1024 快乐 之前写了第一版 网易云爬虫 逻辑比较简单 总结一下,就是: 抓取各分类下歌单id 根据歌单id, 获得这个歌单id下的歌曲详情 把拿到的数据存到落到本地文件, ...

  7. python爬取网易云音乐_python爬取网易云音乐简单案例

    首先找到想要下载的歌曲表单,例如: 打开推荐 点击推荐的歌曲表单 接下来我们尝试爬取这个表单的全部歌曲名,及歌曲的MP3地址 我使用fiddler4抓包工具抓取相关信息 #encoding=utf8 ...

  8. 网易云音乐信息爬取(存储为 csv文件)喜马拉雅音乐爬取

    1. 网易云音乐爬取 分析 源代码 爬取结果, (可使用Excel 表格打开) 2. 喜马拉雅音乐爬取 分析 源代码 爬取结果 获取网易云音乐歌手信息 后续会做一个 网易云音乐爬取 + Tkinter ...

  9. 浅谈Python爬虫(五)【网易云热评爬取实例】

    浅谈Python爬虫(五) 目的:爬取网易云歌单所有歌曲的信息及热评 Python环境:3.7 编译器:PyCharm2019.1.3专业版 存储格式:JSON 1.分析网页 进入网易云音乐首页,点击 ...

最新文章

  1. lolfps高但画面不流畅_全面解析:高刷新率真能提高FPS游戏技术?
  2. 单IP无TMG拓扑Lync Server 2013:活动目录
  3. LeetCode--palindrome-number回文数
  4. dedecms二次开发常用代码
  5. PIFO到底是什么?【Programmable Packet Scheduling at Line Rate】
  6. tensorflow一个很好的博客
  7. php编译gd支持gif,我可以使用php和gd检测GIF动画吗?
  8. -个很个性的二本人计时
  9. 学习笔记 利用反射 手写一个简单的实体类 转json 的方法
  10. .aspx(或.asp)文件与.html(.htm)文件的区别与联系
  11. 视频和视频帧:H264编码格式整理
  12. 免授权采集海天注塑机采集伊之密注塑机监控住友注塑机参数采集
  13. 勃林格殷格翰与Lifebit合作识别全球传染病暴发;百济神州和Shoreline Biosciences达成合作 | 医药健闻...
  14. 飞行堡垒9win键解锁
  15. 一、Lua 教程的学习
  16. maxcompute-入门-环境安装
  17. 2022.5.28-YMO青少年奥林匹克数学竞赛复赛(一等奖)
  18. 只有2~3年左右的开发经验,为什么年薪就可以达到50万+?
  19. 爬虫练习-爬取豆瓣电影 Top 250信息并存储于本地
  20. 拓扑排序三题(菜肴制作杂物最大食物链计数)

热门文章

  1. Arduino驱动L298N控制直流电机的正反转和调速
  2. Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  3. 从零开始学python的第16天
  4. 白雪公主和她的七个供应商
  5. vue开发项目必备知识
  6. jop怎么读音英语怎么说_job怎么读?
  7. AfxOleInit
  8. 美团CodeM2018资格赛赛题官方版本详解(二)——可乐
  9. 第一章 基础 (续 在IIS中寄宿服务)
  10. 6-2 统计专业人数 (10分)