使用 Selenium 提取 Twitter 视频 URL

本教程旨在指导开发者如何使用 Python 和 Selenium 自动化提取 Twitter 推文中嵌入的视频 URL。我们将通过一个实际示例,演示如何利用 Selenium 模拟用户行为,定位视频元素,并提取其对应的直播链接。本教程将提供详细的代码示例和解释,帮助你快速掌握该技术。

Selenium 提取 Twitter 视频 URL 的方法

Twitter 页面结构复杂,直接提取视频源 URL 较为困难。通常,Twitter 会将视频嵌入到直播链接中。因此,我们需要找到包含直播链接的元素,并提取其 href 属性。

示例代码

以下代码演示了如何使用 Selenium 提取 Twitter 推文中的视频直播 URL:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化 Chrome WebDriver
driver = webdriver.Chrome()
driver.maximize_window()

# 打开目标 Twitter 推文
driver.get("https://twitter.com/Tesla/status/1711184330792579093")

# 设置显式等待,最长等待 10 秒
wait = WebDriverWait(driver, 10)

# 接受 cookies (如果需要)
try:
    wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Accept all cookies']"))).click()
except:
    pass # 如果没有 cookies 弹窗,则跳过

# 定位包含直播链接的  标签,并提取 href 属性
link = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@data-testid='card.layoutLarge.media']//following::a[1]"))).get_attribute("href")
print(link)

# 关闭浏览器
driver.quit()

代码解释

  1. 导入必要的库:

    • selenium.webdriver: 用于控制浏览器。
    • selenium.webdriver.common.by.By: 用于指定元素的定位方式(例如,XPATH)。
    • selenium.webdriver.support.ui.WebDriverWait: 用于设置显式等待。
    • selenium.webdriver.support.expected_conditions as EC: 用于定义等待的条件(例如,元素可点击)。
  2. 初始化 WebDriver:

    • driver = webdriver.Chrome(): 创建 Chrome WebDriver 实例。
    • driver.maximize_window(): 最大化浏览器窗口。
  3. 打开 Twitter 推文:

    • driver.get("https://twitter.com/Tesla/status/1711184330792579093"): 使用 WebDriver 打开指定的 Twitter 推文链接。
  4. 设置显式等待:

    • wait = WebDriverWait(driver, 10): 创建 WebDriverWait 实例,设置最大等待时间为 10 秒。
  5. 接受 Cookies (如果需要):

    • try...except 块用于处理可能出现的 Cookies 弹窗。如果找到 "Accept all cookies" 按钮,则点击它。如果不存在,则跳过。
  6. 定位并提取链接:

    • wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@data-testid='card.layoutLarge.media']//following::a[1]"))).get_attribute("href"): 这行代码是关键。它使用 XPath 定位包含直播链接的 标签。
      • //div[@data-testid='card.layoutLarge.media']: 定位包含媒体内容的 div 元素。data-testid 属性是 Twitter 用于测试的属性,相对稳定。
      • //following::a[1]: 在 div 元素之后查找第一个 标签。 这里假设直播链接是媒体内容后第一个出现的链接。
      • EC.element_to_be_clickable(...): 确保找到的元素是可点击的。
      • .get_attribute("href"): 提取 标签的 href 属性,即直播链接。
  7. 打印链接:

    • print(link): 将提取到的直播链接打印到控制台。
  8. 关闭浏览器:

    • driver.quit(): 关闭浏览器窗口,释放资源。

注意事项

  • XPath 的选择: XPath 表达式需要根据 Twitter 页面结构进行调整。Twitter 的页面结构可能会发生变化,因此需要定期检查和更新 XPath。可以使用浏览器的开发者工具来查找合适的 XPath。
  • 显式等待: 使用显式等待可以确保元素在被操作之前已经加载完成,避免出现 NoSuchElementException 异常。
  • Cookies 处理: 根据实际情况处理 Cookies 弹窗。
  • 反爬虫机制: Twitter 具有反爬虫机制。频繁的请求可能会导致 IP 被封禁。建议设置合理的请求间隔,并使用代理 IP。
  • 直播链接的有效性: 提取到的直播链接可能不是永久有效的。Twitter 的直播链接可能会在一段时间后失效。
  • 错误处理: 建议添加适当的错误处理机制,例如捕获 TimeoutException 异常,以便在元素未找到或超时的情况下进行处理。

总结

本教程介绍了如何使用 Selenium 提取 Twitter 推文中的视频直播 URL。通过合理地选择 XPath 表达式,并使用显式等待,可以有效地定位目标元素,并提取所需的信息。在实际应用中,需要注意 Twitter 的反爬虫机制,并采取相应的措施。 此外,请务必遵守 Twitter 的使用条款和条件。

以上就是使用 Selenium 提取 Twitter 视频 URL的详细内容,更多请关注骃骐网【www.myinqi.com】。

相关推荐:

如何高效提取 DataFrame 中指定起始索引的连续行段(支持单列与多列)

本文介绍一种高效、向量化的方法,替代低效的循环 pd.concat,从原始 DataFrame 中按子集索引批量提取长度为 n 的连续行段,尤其适用于单列选取场景,避免因误用 .iloc 与 [] 操作符导致的索引对齐错误和 NaN 问题。 本文介绍一种高效、向量化的方法,替代低效的循环 `pd.concat`,从原始 dataframe 中按子集索引批量提取长度为 `n` 的连续行段,尤其适用于...

Python如何快速提取NumPy矩阵的对角线元素_调用np.diag与偏移量参数设置

np.diag 提取主对角线最简单,但输入为一维数组时会生成对角矩阵而非提取对角线;需确认 arr.ndim == 2 或先用 np.atleast_2d(arr);k 参数控制偏移,有效范围为 -(m-1) ≤ k ≤ n-1。 直接用 np.diag 提取主对角线最简单,但别默认它只返回一维数组 调用 np.diag 时,如果输入是二维数组(如 ndarray),它默认提取主对角线并返回一维 ...

如何利用Python爬虫抓取短视频平台无水印链接_解析视频接口背后的加密算法

抖音/TikTok 的 _signature 参数由前端 JS 基于 URL、设备指纹、页面加载时间等动态生成,常依赖 WebAssembly 或混淆代码,逆向成本高;实操应使用 Playwright 等真实浏览器自动执行 JS 获取,需严格模拟 UA、viewport、语言等环境,且签名 5–10 分钟失效。 抖音/TikTok 的 _signature 参数是怎么生成的? 它不是固定值,也不是...

如何用Python自动从PDF报表中提取表格数据_使用camelot-py库精准识别

camelot-py默认提取PDF表格不可靠,因其lattice模式依赖显式边框、stream模式易受页眉页脚干扰,且不返回坐标与置信度;需结合pdfplumber定位区域,混合flavor、手动设table_areas和columns,并校验accuracy、空值及可视化覆盖。 camelot-py 能提取 PDF 表格,但默认设置下极易漏行、错列、吞空格,尤其对带合并单元格、浅色边框或扫描件(...

Python爬虫如何识别图片内容_集成Tesseract进行OCR文字提取

pytesseract调用Tesseract是Python爬虫轻量级OCR最可行方案,但必须显式设置tesseract_cmd路径和lang参数(如lang='chi_sim'),否则90%报错源于此;中文识别需下载chi_sim.traineddata放入tessdata目录,并确保Tesseract版本≥5.3。 直接说结论:pytesseract 调用 Tesseract 是目前 Pytho...

Python如何计算时间差_两时间列相减与Timedelta天数提取

必须先用pd.to_datetime()将时间列转为datetime64类型才能相减,否则报TypeError;结果为timedelta64[ns],需用.dt.days等 accessor 提取数值,注意空值和时区处理。 直接用 pd.to_datetime() 转再相减,别用字符串硬算 时间列是字符串时,df['end'] - df['start'] 会报 TypeError: unsuppo...

高效提取目标数组中满足多组上下界条件的索引列表

本文介绍如何在 Python 中高效获取多个上下界区间内目标数组元素的原始索引,重点对比朴素布尔掩码、NumPy 向量化搜索与排序+二分查找三种方法,推荐使用 np.searchsorted 实现毫秒级批量区间定位。 本文介绍如何在 python 中高效获取多个上下界区间内目标数组元素的原始索引,重点对比朴素布尔掩码、numpy 向量化搜索与排序+二分查找三种方法,推荐使用 `np.searchs...

高效提取目标数组中满足多组上下界条件的索引列表(基于排序+二分搜索)

本文介绍如何在Python中高效提取目标数组中落在多组动态上下界范围内的元素索引,重点对比原始逐条件布尔掩码法与基于排序+二分搜索(bisect/np.searchsorted)的优化方案,实测numpy版本性能提升达45倍。 本文介绍如何在Python中高效提取目标数组中落在多组动态上下界范围内的元素索引,重点对比原始逐条件布尔掩码法与基于排序+二分搜索(`bisect`/`np.searchs...

如何使用 Tesseract 正确从图像中提取文本

本文介绍如何通过 python 调用 tesseract ocr 引擎,高效、准确地从清晰的单行文本图像中提取数值或短文本,并提供可直接运行的代码示例及关键参数说明。 本文介绍如何通过 python 调用 tesseract ocr 引擎,高效、准确地从清晰的单行文本图像中提取数值或短文本,并提供可直接运行的代码示例及关键参数说明。 在实际开发中,从图像中识别文本(OCR)是一项常见需求,而 Te...

Python中如何提取NumPy数组中满足条件的元素索引_使用where函数筛选

np.where返回索引元组而非一维数组,二维数组返回(row_indices, col_indices);需用[0]取行索引、zip(*np.where())得坐标对、flatnonzero得线性索引;注意条件优先级、视图赋值及性能差异。 np.where 返回的是索引元组,不是一维索引数组 直接对二维数组调用 np.where(condition) 会返回一个长度为 ndim 的元组,比如二维...