2016-12-01 72 views
0

這是我目前的代碼。我不確定我做錯了什麼。也許我沒有深入挖掘HTML,並給Beautifulsoup正確的標籤?目前,我的代碼正在返回空白。如何使用Beautifulsoup4和Python 3在網頁上截留YouTube成績單

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> 

***編輯

的代碼可以通過點擊「更多」旁邊的分享按鈕中找到。然後你點擊成績單,你會看到所有的文字。

+0

我無法找到該網頁上,並在html這一行。這條線是什麼? –

+0

你確定這沒有通過ajax動態加載?打開頁面源,靜態源中可能沒有這樣的元素。 –

+0

@Yevhen Kuzmovych 如果您轉到YouTube頁面,共享旁邊會出現一個「更多」按鈕。點擊它,然後點擊成績單。它是行0:07。 –

回答

0

哦,是的,它通過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幫助了我。你可以忽略大部分這些參數,只是使用這個網址:

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

還是這一般:

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

這是否意味着只能通過轉到另一個網址來抄襲抄本?並不能直接從頁面上刮掉? –

+0

@BHok是的,你需要一個不同的網址。例如,您需要使用[this regex](https://regex101.com/r/RuGXmI/2)提取舊網址的{{video_id}'部分:'v =(?P [a- ZA-Z \ d _] +)'。或者用一些庫解析url並獲得'v'參數,這是一項乏味的任務。然後放入新的,如果你需要這個自動完成。 –

+0

@BHok如果此答案解決了您的問題,請考慮[將其標記爲已接受](http://stackoverflow.com/help/accepted-answer)(綠色檢查)。 –

相關問題