如何使用Beautifulsoup4和Python3在web上抓取youtube成绩单

2024-04-19 19:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我目前的代码。我不确定我做错了什么。也许我在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>

***编辑

通过单击共享按钮旁边的“更多”可以找到代码。然后你点击成绩单,你会看到所有的文本


Tags: 代码namefromimportdividhtmlline
1条回答
网友
1楼 · 发布于 2024-04-19 19:18:56

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

当您收到api/timedtext请求时,响应是XML。 这里是成绩单的完整url:

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}

相关问题 更多 >