Selenium爬取网易云音乐评论
Selenium爬取网易云音乐评论
一、爬取工具
1.1 selenium
selenium这是一个第三方库我们可以通过 pip install selenium
来安装这个第三方库。
Selenium 是一个 Web 的自动化测试工具,最初是为网站自动化测试而开发的,就像玩游戏用的按键精灵,可以按指定的命令自动操作。Selenium 测试工具直接操控浏览器中,就像真正的用户在操作一样。Selenium 可以根据的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等。
1.2 浏览器驱动
Selenium 支持多种浏览器,最常见的就是 火狐 和 谷歌 浏览器。首先在电脑上下载浏览器,浏览器版本不宜过新。这里我用的是更新过的Microsoft.Edge
Microsoft.Edge 驱动链接地址
Chrome驱动链接地址
FireFox驱动链接地址
下载后我们可以把它放在python的同级目录(调用时不用再写路径),也可以不放,这里我选择不放。
好!这里我们直接开干!
from selenium import webdriver # 导入模块url = 'https://music.163.com/#/song?id=86369' # 爬取歌曲评论的链接
爬取
1、解析网页
class CloudMusic:def __init__(self, url):self.url = urlself.driver = webdriver.Edge(executable_path="./msedgedriver.exe") # 创建驱动器def get_content(self):self.driver.get(url) # 请求网页 if __name__ == '__main__':spider = CloudMusic(url)spider.get_content()
这里我们先定义一个类对然后定义了属性,请求的网页链接,以及驱动器的创建,这里需要注意的是,因为selenium是直接操控浏览器,所以我们只有运行后才能看到结果。
这里运行后我们看到它创建了浏览器并且访问了页面,和我们正常的页面还是有区别的对吧。
2、解析网页
再点开网页检查时我们发现他有一个ifram标签
这里我们需要注意的是如果我们跳过ifram标签直接解析或者访问我们需要的元素我们是访问不到的,因为< frame> 标签,浏览器会在标签中打开一个特定的页面窗口(框架),它在本窗口中嵌套进入一个网页,就像登录时候他会弹出登录对话框,这时候对话框后面的内容我们是无法访问或者操作的,所以我们要进去ifram框中才能取得元素。
通过find查找我们发现网页中有6个和ifram相关的元素,三个同级还有三个没有啥内容,所以判断我们需要的页面元素在第一个框
def get_content(self):self.driver.get(url) # 请求网页self.driver.switch_to.frame(0) # 0代表进入第一个框 索引
然后我们就可以来选择我们需要的元素了。selenium给我们提供了很多提取页面元素的方法(后续会写一篇selenium的快速用法),这里我们选择css选择器,我觉得比较简单,而且也可以在网页上直接定位到内容。
这样我们就定位到了选择的标签,接下来我们试着来提取标签内容
从截图中我们看到我们已经提取到了内容,但是看不太懂对吧,其实这是因为我们没有转换格式,通过type(common)
我们知道他其实是(<class 'selenium.webdriver.remote.webelement.WebElement'>)
网页元素我们可以用.text
变成我们可以看懂的文本模式。
这样我们就得到的我们想要的内容,但是这些数据太少了对吧,如果我们需要更多的数据我们就需要更多的页面的评论,那么 下一页 是不是能符合我们的需求呢?
用selenium点击下一页
同样我们也要定位到下一页
的标签还是用上面的方法,但是我们发现这个定位太复杂了,越复杂越容易报错,那我们往前面看一点,我们看他的class
class也很长对吧 但是有特殊两个 zbnt 和znxt 通过查找我们发现 zbnt有两个选项,这肯定不行,幸运的是znxt是唯一的。但是他有一个问题,就是他代表的不是一个完整的标签那我们肯定也是选不到的,但是可以在前面加一个 . 选全部!
next_page = self.driver.find_element_by_css_selector(".znxt") # 下一页标签
next_page.click() # selenium方法 点击这一行代表的元素
在添加代码执行后他给我报错了,element click intercepted
元素点击被拦截,这个问题挺抽象的,明明定位到了却不能点击?在查阅资料(Google)后知道了,可能是标签上可能被什么不知名的元素遮挡了,所以我们无法点击,我们要驱动Java-scrapy
来点击,
# arguments[0].click(); 是Java scrapy的一个语法,意思是 方法将元素的引用作为参数 [0] 以及要执行的方法 ,我们后面的next_page位置就是 0 如果后面还有其他标签(sss) 那么他的位置就是 1
self.driver.execute_script("arguments[0].click();", next_page#, sss)
ps:selenium click()
不起作用是常态
这样我们就能正常访问了 ,这下就没有报错,并且正常点击到下一页了!,先在我们缺的就是一个循环和文件写入了,我们把它补上!
import timefrom selenium import webdriverurl = 'https://music.163.com/#/song?id=86369'class CloudMusic:def __init__(self, url, number):self.url = urlself.number = numberself.driver = webdriver.Edge(executable_path="./msedgedriver.exe") # 创建驱动器def get_content(self):self.driver.get(url) # 请求网页self.driver.switch_to.frame(0) # 进入ifram标签for i in range(self.number): # 爬取多少页commons = self.driver.find_elements_by_css_selector('div.cnt.f-brk') # 提取评论链接 加 s# print(commons)for common in commons:with open("偏爱.txt", "at", encoding="utf8")as f: # 文件名自行修改 追加写入f.write(f"{common.text}\n") # 写入文本next_page = self.driver.find_element_by_css_selector(".znxt") # 单数 不加sself.driver.execute_script("arguments[0].click()", next_page)time.sleep(1) # 加一个延迟 ,避免网速太慢页面没刷新,1s比较短self.driver.quit() # 执行完毕退出if __name__ == '__main__':spider = CloudMusic(url, 10)spider.get_content()
这样我们就得到了,前十页的评论信息!
Selenium爬取网易云音乐评论相关推荐
- python爬取评论_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- python爬取网易云音乐评论并进行可视化分析
2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家一个爬取网易云音乐评论的Python案例,并用Python的第三方库来进行可视化分析,生成图表样式,可以清晰地 ...
- python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名
目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...
- python爬取网易云音乐热评_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- python爬取网易云评论最多的歌_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- python爬取网易云音乐评论分析_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
- golang+es 爬取网易云音乐评论
目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...
- golang+es爬取网易云音乐评论
目的和准备 目的: 为了知道自己歌单中每首歌的评论,然后通过歌曲id来检索这首歌的所有评论,并且想熟悉运用golang中的channel以及整个爬虫架构 准备: 语言:golang 编辑器: gola ...
- 用python爬取网易云评论_python爬取网易云音乐评论
本文实例为大家分享了python爬取网易云音乐评论的具体代码,供大家参考,具体内容如下 import requests import bs4 import json def get_hot_comme ...
最新文章
- python list倒序_Python基础-不一样的切片操作
- 科大讯飞2019年创下历史最佳业绩,员工涨薪27%,营收来源妥妥「安徽之光」
- 5、删除用户(DROP/DELETE USER)
- 《系统集成项目管理工程师》必背100个知识点-52成功的项目团队特点
- 源端RAC数据库删除实例操作时GoldenGate的运维流程
- php设置session 生命周期,设置session的生命周期(php)
- uiswitchbutton 点击不改变状态_ES6专题—Generator与react状态机(14)
- SilverLight学习笔记--实际应用(一)(4):手把手建立一个Silverlight应用程序之同步数据校验1...
- 显示部分x_i5 9400F+GTX 1030+23.8英寸,攀升迁跃者X上手简评
- JAVA中pin什么意思_银行业加密算法,PIN相关算法(java-国密)
- 最小二乘拟合问题求解算法(含python代码)
- row_number()的使用
- 疑问点sqlilibs 第一关
- VB 四言古诗词赏析 制作
- 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频
- Android 手机拨号
- 税务总局:今年预计减税1.8万亿元!个体户能享受哪些税收优惠?
- Python+Vue计算机毕业设计牙无忧6ayy4(源码+程序+LW+部署)
- 这朵玫瑰叫Jenny
- IT行业分析之嵌入式应用