- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试为字幕抓取 YouTube 页面。不幸的是,它没有根据请求加载所有内容。我很想知道我哪里出错了。
查询字符串:
https://www.youtube.com/timedtext_editor?action_mde_edit_form=1&v=Nxb2s2Mv6Pw&lang=en&bl=vmp&forceedit=captions&tab=captions
所以我发现这是唯一的 Url-I.D ... Nxb2s2Mv6Pw
我可以相应地替换它。
如果我运行下面的代码,它不会捕获标签 <textarea yt-uix-form-input-textarea ...>
我需要它来定位。
我极力避免使用 Selenium 来捕获它,因为我有很多链接需要遍历并重复该过程。您可以通过下面的代码看出,我尝试加入延迟时间来等待页面加载,但没有成功。
import os
import codecs
import sys
import requests
from bs4 import BeautifulSoup
channel = 'https://www.youtube.com/timedtext_editor?action_mde_edit_form=1&v=dto4koj5DTA&lang=en'
s = requests.Session()
time.sleep(5)
# s.headers['User-Agent'] = USER_AGENT
r = s.get(channel)
time.sleep(5)
html = r.text
soup = BeautifulSoup(html, 'lxml')
for i in soup.find_all('div'):
print(i)
请指教。
最佳答案
我尝试使用 requests
和 lxml
抓取页面,但是在遍历脚本中的标签时,我在页面上找不到字幕(textarea 标签位于字幕不会出现在脚本中)这可能是因为 YouTube 使用 javascript 加载字幕。
Python 的请求库不支持javascript。但是,您有几个选择:
使用 selenium 抓取字幕(你说过你不想这样做。)
通过浏览器查看 POST 和 GET 请求,并尝试将所需的请求参数发送到您跟踪 javascript 的 url(如果身份验证或动态 token 用于参数,可能并不总是有效)
(这似乎是最简单/最可靠的方法。)
youtube-dl 是一个命令行工具,但是你也可以根据github上的文档导入它。
有几种方法可以解决这个问题。我将使用您在帖子中指向的视频作为我的示例:
youtube-dl --write-sub --skip-download --sub-lang en https://www.youtube.com/watch?v=Nxb2s2Mv6Pw
话虽如此,您可以在 python 中创建一个函数来调用命令:
import os
def download_subs(video_url, lang="en"):
cmd = [
"youtube-dl",
"--skip-download",
"--write-sub",
"--sub-lang",
lang,
video_url
]
os.system(" ".join(cmd))
url = "https://www.youtube.com/watch?v=Nxb2s2Mv6Pw"
download_subs(url)
或者,您可以直接从 python 导入 youtube_dl
并从那里使用它:
import youtube_dl
def download_subs(url, lang="en"):
opts = {
"skip_download": True,
"writesubtitles": "%(name)s.vtt",
"subtitlelangs": lang
}
with youtube_dl.YoutubeDL(opts) as yt:
yt.download([url])
url = "https://www.youtube.com/watch?v=Nxb2s2Mv6Pw"
download_subs(url)
这会在名为
的工作目录中创建一个文件CNN 'Exposed' In Controversial Secret Video and Anita Sarkeesian's 'Punishment'...-Nxb2s2Mv6Pw.en.vtt
WEBVTT
Kind: captions
Language: en
00:00:00.000 --> 00:00:01.500
You beautiful bastards
00:00:01.500 --> 00:00:07.200
Hope you having a fantastic Tuesday welcome back to the Philip Defranco show and let's just jump into it the first thing
00:00:07.200 --> 00:00:11.519
I want to talk about today one of the most requested stories of the day today is an update on the
00:00:11.889 --> 00:00:13.650
Craziness out of Vidcon yesterday
00:00:13.650 --> 00:00:19.350
Specifically we're talking about creator and panelist Anita Sarkeesian being on a panel calling someone in the crowd
...
...
关于python - 无法抓取 YouTube 视频的隐藏式字幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48125300/
我刚刚更新了 Ruby,现在我在尝试启动 compass 时遇到以下错误: Encoding::CompatibilityError on line ["28"] of /usr/local/Cell
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试在我的 iOS 应用程序中开发可折叠/ Accordion 式的功能。这将是您可以在网站上找到的典型 FAQ 类型功能。我想点击标题,然后显示详细信息。 因为这是帮助部分,只有几个项目,我认
我正在尝试设计一个基于 REST 的 Web 服务来与我正在开发的农场动物管理系统进行交互。 为了详细说明问题,我收藏了动物 属于一个农场。每只动物都有自己的信息——例如姓名、身份证号、品种年龄等。因
我有 3 种不同的表单,其中复选框数量不同,每个部分基本上代表一个表单,因此当用户选择该部分中的复选框时,它会显示他们在该部分的总金额中 checkout 了多少 HTML
我有一份 32 页的 PDF 版家谱。与其将家谱全部放在一个非常大的 PDF 页面上(这是我想要的),不如将其格式化为一组 8 个单独的美国信纸大小的页面应该在整个宽度上缝合; 4 行这样就完成了树。
指SASS implementation for Java? : 在 Maven 目标编译包中自动编译 compass-style.org 样式表的最佳方法是什么? 我不想发送太多的自编译库,也不想通
鉴于以下 XAML... 我正在寻找一种绑定(bind) ComboBox、Button 和 Command 的方法,以便当 ComboBox 的值更改时,在 Command 上调用 CanExe
在玩具应用程序中,我有一个显示所有帖子标题的“帖子”模板。当您单击每个标题时,我不想直接进入“显示” View ,而是直接内联展开该帖子的其余内容。 我考虑过让 postRoute 重用 postsR
我需要一些使用 Twitter Bootstrap 或其他响应式框架的自定义 Swagger-UI 实现。需要在我的移动设备上使用这样的 UI 测试我的 API,但 swagger-ui 不能很好地扩
我正在做一个项目,我真的在尝试编写面向对象的 JavaScript 代码。我刚刚开始阅读Douglas Crockford's JavaScript: The Good Parts我很快开始意识到用
在 C# 中,我通过执行以下操作来加密文本数据(请注意我正在以 block ( block )的形式加密数据): public string EncryptData(string pu
我正在构建一个社交网站,该网站将向全世界公开 REST API (WCF WebAPI),以便任何开发人员都能够为该网站创建客户端应用程序、将其与其他服务集成等。 我想为 API 实现 Faceboo
我是一名优秀的程序员,十分优秀!