【问题标题】:How to web scrape youtube transcripts with Beautifulsoup4 and Python 3如何使用 Beautifulsoup4 和 Python 3 抓取 youtube 成绩单
【发布时间】:2016-12-01 23:14:46
【问题描述】:

这是我当前的代码。我不确定我做错了什么。也许我没有深入挖掘 html 并给 Beautifulsoup 正确的标签?目前,我的代码返回空白。

from bs4 import BeautifulSoup
from urllib.request import urlopen
html = urlopen("https://www.youtube.com/watch?v=5_zrHZdhaBU")
soup = BeautifulSoup(html,'html.parser')
nameList = soup.findAll("div", {"id": "cp-2"})
for name in nameList:
    print(name.get_text())

这是我检查的代码。我试图让 Python 回到我身边,“但它没有被卷起”

<div id="cp-2" class="caption-line" data-time="7.54"><div class="caption-line-time">0:07</div><div class="caption-line-text">but it was untucked.</div></div>

***编辑

点击分享按钮旁边的“更多”可以找到代码。然后你点击成绩单,你会看到那里的所有文字。

【问题讨论】:

  • 我在页面和 html 中找不到这一行。这是什么线?
  • 你确定这不是通过 ajax 动态加载的吗?打开页面源,静态源中可能没有这样的元素。
  • @Yevhen Kuzmovych 如果您访问 youtube 页面,在分享旁边有一个“更多”按钮。点击它,然后点击成绩单。现在是 0:07 行。
  • @Andrey Moiseev 也许是?我只是注意到我也没有在开放页面源代码中看到。我刚刚使用谷歌浏览器的检查来找到sn-p。我正在查看可以点击分享按钮旁边的“更多”的成绩单。
  • @BHok 您可能可以找到从中加载脚本的文件。 “资源”或“网络”元素检查器选项卡。

标签: python python-3.x youtube web-scraping beautifulsoup


【解决方案1】:

哦,是的,它是通过 Ajax 加载的:打开页面,然后打开 Network 选项卡,按开始时间排序请求(最新请求优先),点击 Youtube 上的 CC 按钮。

您收到api/timedtext 请求,响应是一个XML。 这是成绩单的完整网址:

https://www.youtube.com/api/timedtext?signature=1A03D323CBD455E9993B7AC447CA64764FA6FE75.59F4BD2D45A32E89FBF54B418EE2F763283A1007&asr_langs=fr%2Cja%2Cnl%2Ces%2Cru%2Cko%2Cit%2Cde%2Cpt%2Cen&key=yttt1&caps=asr&v=5_zrHZdhaBU&hl=en_US&expire=1480702409&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&lang=en&fmt=srv3

不过,我不知道这个 URL 是如何生成的。这需要调查复杂的 YouTube 脚本等。

编辑: This answer 帮助了我。您可以省略大部分参数,只使用此 URL:

https://www.youtube.com/api/timedtext?&v=5_zrHZdhaBU&lang=en

或者一般来说:

https://www.youtube.com/api/timedtext?&v={video_id}&lang={language_code}

【讨论】:

  • 这是否意味着只能通过转到另一个网址来抓取成绩单?并且不能直接从页面抓取?
  • @BHok 是的,您需要一个不同的网址。您需要提取旧网址的{video_id} 部分,例如this regexv=(?P&lt;video_id&gt;[a-zA-Z\d_]+)。或者用一些库解析 url 并获取 v 参数,这是一项繁琐的任务。然后放入新的,如果您需要自动完成。
  • @BHok 如果此答案解决了您的问题,请考虑marking it as accepted(绿色勾选)。
猜你喜欢
  • 2018-02-16
  • 2016-03-21
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多