Selenium Chrome Webdriver 如何获取 Youtube 悬停文本

简介: Youtube 是一个非常流行的视频分享平台,有时候我们可能想要爬取一些视频的信息,比如标题、播放量、点赞数等。但是有些信息并不是直接显示在网页上的,而是需要我们将鼠标悬停在某个元素上才能看到,比如视频的时长、上传时间等。这些信息被称为悬停文本,它们是通过 JavaScript 动态生成的,所以我们不能用普通的 HTML 解析方法来获取它们。那么,我们该如何用爬虫来获取 Youtube 的悬停文本呢?本文将介绍一种方法,使用 Selenium Chrome Webdriver 来模拟浏览器操作,获取 Youtube 的悬停文本。

亿牛云代理.jpg

导语

Youtube 是一个非常流行的视频分享平台,有时候我们可能想要爬取一些视频的信息,比如标题、播放量、点赞数等。但是有些信息并不是直接显示在网页上的,而是需要我们将鼠标悬停在某个元素上才能看到,比如视频的时长、上传时间等。这些信息被称为悬停文本,它们是通过 JavaScript 动态生成的,所以我们不能用普通的 HTML 解析方法来获取它们。那么,我们该如何用爬虫来获取 Youtube 的悬停文本呢?本文将介绍一种方法,使用 Selenium Chrome Webdriver 来模拟浏览器操作,获取 Youtube 的悬停文本。

正文

概述

Selenium 是一个自动化测试工具,它可以控制浏览器进行各种操作,比如打开网页、输入文字、点击按钮等。Selenium 支持多种浏览器和编程语言,其中 Chrome Webdriver 是用于控制 Chrome 浏览器的驱动程序。我们可以使用 Selenium Chrome Webdriver 来模拟人类的浏览行为,获取 Youtube 的悬停文本。

亮点

使用 Selenium Chrome Webdriver 的优点有:

  • 可以获取动态生成的网页内容,不受 JavaScript 的限制
  • 可以模拟鼠标悬停、滚动、点击等操作,更接近真实的用户体验
  • 可以设置代理服务器,突破网站的反爬机制
  • 可以设置浏览器选项,如无头模式、隐身模式等,提高爬虫效率和安全性

    案例

    下面我们来看一个具体的案例,如何使用 Selenium Chrome Webdriver 来获取 Youtube 的悬停文本。我们以 https://www.youtube.com/watch?v=5qap5aO4i9A 这个视频为例,它是一个很受欢迎的音乐直播视频,我们想要获取它的标题、播放量、点赞数、时长和上传时间。
    首先,我们需要导入必要的库和模块,如 Selenium、Chrome Webdriver 等:
# 导入必要的库和模块
from selenium import webdriver # 导入 Selenium 库
from selenium.webdriver.common.by import By # 导入 By 类
from selenium.webdriver.support.ui import WebDriverWait # 导入 WebDriverWait 类
from selenium.webdriver.support import expected_conditions as EC # 导入 expected_conditions 模块
from selenium.webdriver.common.action_chains import ActionChains # 导入 ActionChains 类
import time # 导入 time 模块

然后,我们需要设置代理服务器,这里我们使用亿牛云提供的代理服务器:

# 亿牛云 爬虫加强版 设置代理服务器
proxyHost = "www.16yun.cn" # 代理服务器域名或 IP 地址
proxyPort = "31111" # 代理服务器端口号

# 代理验证信息
proxyUser = "16YUN" # 代理用户名
proxyPass = "16IP" # 代理密码

# 构造代理认证字符串
proxyAuth = proxyUser + ":" + proxyPass

# 构造 Chrome 选项对象
chrome_options = webdriver.ChromeOptions()

# 添加代理扩展
chrome_options.add_extension("Proxy-Auto-Auth_v2.0.crx")

# 添加代理认证参数
chrome_options.add_argument("--proxy-server=http://" + proxyHost + ":" + proxyPort)
chrome_options.add_argument("--proxy-auth=" + proxyAuth)

接下来,我们需要创建一个 Chrome Webdriver 对象,并打开目标网页:

# 创建 Chrome Webdriver 对象
driver = webdriver.Chrome(options=chrome_options)

# 打开目标网页
driver.get("https://www.youtube.com/watch?v=5qap5aO4i9A")

然后,我们需要等待网页加载完成,并找到我们想要获取的元素:

# 等待网页加载完成
wait = WebDriverWait(driver, 10) # 设置最长等待时间为 10 秒
wait.until(EC.presence_of_element_located((By.ID, "container"))) # 等待 id 为 container 的元素出现

# 找到视频标题元素
title = driver.find_element_by_xpath("//h1/yt-formatted-string") # 使用 XPath 定位视频标题元素

# 找到视频播放量元素
views = driver.find_element_by_xpath("//div[@id='info']/div[@id='info-text']/ytd-video-view-count-renderer/span[@class='view-count style-scope ytd-video-view-count-renderer']") # 使用 XPath 定位视频播放量元素

# 找到视频点赞数元素
likes = driver.find_element_by_xpath("//div[@id='top-level-buttons']/ytd-toggle-button-renderer[1]/a/yt-formatted-string") # 使用 XPath 定位视频点赞数元素

# 找到视频时长元素
duration = driver.find_element_by_xpath("//div[@id='movie_player']/div[@class='ytp-chrome-bottom']/div[@class='ytp-chrome-controls']/div[@class='ytp-left-controls']/span[@class='ytp-time-duration']") # 使用 XPath 定位视频时长元素

# 找到视频上传时间元素
upload_time = driver.find_element_by_xpath("//div[@id='date']/yt-formatted-string") # 使用 XPath 定位视频上传时间元素

接着,我们需要模拟鼠标悬停在视频时长和上传时间元素上,才能获取它们的文本:

# 模拟鼠标悬停在视频时长元素上
action1 = ActionChains(driver) # 创建 ActionChains 对象
action1.move_to_element(duration) # 移动鼠标到视频时长元素上
action1.perform() # 执行操作

# 模拟鼠标悬停在视频上传时间元素上
action2 = ActionChains(driver) # 创建 ActionChains 对象
action2.move_to_element(upload_time) # 移动鼠标到视频上传时间元素上
action2.perform() # 执行操作

最后,我们可以获取各个元素的文本,并打印出来:

# 获取各个元素的文本
title_text = title.text # 获取视频标题文本
views_text = views.text # 获取视频播放量文本
likes_text = likes.text # 获取视频点赞数文本
duration_text = duration.get_attribute("aria-label") # 获取视频时长文本,注意这里要用 get_attribute 方法,因为 aria-label 是一个属性,不是一个子节点
upload_time_text = upload_time.get_attribute("aria-label") # 获取视频上传时间文本,同理

# 打印各个元素的文本
print("标题:", title_text)
print("播放量:", views_text)
print("点赞数:", likes_text)
print("时长:", duration_text)
print("上传时间:", upload_time_text)

运行上面的代码,我们可以得到如下的输出:

标题: lofi hip hop radio - beats to relax/study to
播放量: 3.8亿次观看
点赞数: 1000万次赞同
时长: 视频长度 0:00 / 0:00。
上传时间: 已于 2020年2月22日发布。

结语

通过这个案例,我们可以看到,使用 Selenium Chrome Webdriver 来获取 Youtube 的悬停文本是一种可行的方法,它可以让我们获取动态生成的网页内容,模拟真实的用户行为,突破网站的反爬机制。当然,这种方法也有一些缺点,比如需要安装浏览器和驱动程序,运行速度运行相对较慢,占用较多的系统资源等。因此,我们需要根据不同的爬虫需求,选择合适的爬虫工具和方法。如果你想了解更多关于 Selenium Chrome Webdriver 的用法和技巧,你可以访问官方网站 https://www.selenium.dev/ 参考一些优秀的教程。希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎留言评论。谢谢你的阅读和支持!

相关文章
|
3月前
|
Web App开发 Python
Python使用selenium的Chrome下载文件报错解决
Python使用selenium的Chrome下载文件报错解决
47 0
|
3月前
|
Web App开发 Python
python+selenium+Chrome 监测文件是否下载完毕
python+selenium+Chrome 监测文件是否下载完毕
49 0
|
7月前
|
Web App开发 测试技术
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
162 0
|
8月前
|
Web App开发 JavaScript
2021最新Selenium真正绕过webdriver检测
2021最新Selenium真正绕过webdriver检测
186 0
|
4天前
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
【4月更文挑战第15天】本文介绍了如何使用Selenium进行浏览器窗口切换以操作不同页面元素。首先,获取浏览器窗口句柄有两种方法:获取所有窗口句柄的集合和获取当前窗口句柄。然后,通过`switchTo().window()`方法切换到目标窗口句柄。在项目实战部分,给出了一个示例,展示了在百度首页、新闻页面和地图页面之间切换并输入文字的操作。最后,文章还探讨了在某些情况下可能出现的问题,并提供了一个简单的本地HTML页面示例来演示窗口切换的正确操作。
26 0
|
6月前
|
Web App开发
chrome 浏览器在 112 正式版本以及 114 canary 版本从 devtools 控制台复制文本不会复制高亮显示的文本?
chrome 浏览器在 112 正式版本以及 114 canary 版本从 devtools 控制台复制文本不会复制高亮显示的文本?
63 0
|
9月前
|
Web App开发 JavaScript 前端开发
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
数据挖掘和分析是当今互联网时代的重要技能,它可以帮助我们从海量的信息中提取有价值的知识,为我们的决策和行动提供支持。但是,有些网站的内容是通过Javascript动态生成的,这就给数据挖掘和分析带来了一定的难度。如何才能有效地获取和处理这些Javascript内容呢?本文将介绍一种简单而强大的方法,就是使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析。
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
|
9月前
|
Web App开发 Java Apache
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟真实的用户在浏览器中进行各种操作,如点击、输入、滚动等。Selenium支持多种浏览器,如Chrome、Firefox、Edge等,但是每种浏览器都需要相应的驱动程序才能与Selenium进行通信。本文将介绍如何在Selenium中使用Chrome浏览器,并且设置代理服务器来避免被目标网站识别。
246 0
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
|
10月前
|
Web App开发
chrome配置selenium操作
chrome配置selenium操作
|
2月前
|
Web App开发 JavaScript 前端开发
从零开始,轻松打造个人化Chrome浏览器插件
从零开始,轻松打造个人化Chrome浏览器插件
67 0

热门文章

最新文章