2016-12-01 13 views
0

ここに私の現在のコードがあります。私は何が間違っているのか分かりません。多分私はhtmlで十分深く掘り下げておらず、Beautifulsoupに正しいタグを与えているのでしょうか?現時点では、私のコードは空白を返しています。Beautifulsoup4とPython 3であなたの動画をスクラップする方法

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()) 

これは私が検査したコードです。

<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> 

***編集

コードは次のシェアボタンに「もっと」をクリックすることで見つけることができる私は、Pythonが私に戻って戻るために取得しようとしている「が、それはuntuckedでした」。次に、トランスクリプトをクリックすると、そこにすべてのテキストが表示されます。

+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スクリプトなどが必要です。

EDIT: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} 
+0

これは、別のURLに行くことによってのみトランスクリプトをスクラップできることを意味しますか?そして、ページから直接掻き取ることはできませんか? –

+0

@BHokはい、別のURLが必要です。たとえば、[this regex](https://regex101.com/r/RuGXmI/2)で古いurlの '{video_id} '部分を抽出する必要があります:' v =(?P [a- zA-Z \ d _] +) 'となります。または、いくつかのライブラリでurlを解析し、 'v'パラメータを取得すると、面倒な作業です。これを自動的に行う必要がある場合は、新しいものに入れてください。 –

+0

@BHokこの回答があなたの問題を解決する場合は、[それを受け入れたものとしてマークする](緑色のチェック)を検討してください。 –

関連する問題