2017-09-03 9 views
1
import requests 
from bs4 import BeautifulSoup 

youtube = "https://www.youtube.com/results?search_query=" 

def get_address(keyword): 
    query = youtube + keyword 
    source_code = requests.get(query) 
    plain_text = source_code.text 
    soup = BeautifulSoup(plain_text, "html.parser") 

    for link in soup.findAll('a', {'id': 'video-title'}): 
     href = link.get('href') 
     print(href) 
     break 

get_address("scishow") 

プログラムは正常に実行されますが、ビデオのアドレスを表示する代わりに、出力に何も表示されません。なぜこのYouTubeクローラにはPythonで出力が表示されませんか?

+0

あなたのコードは問題ありません。あなたが探している 'a'タグが存在しないため、出力に何も表示されない唯一の理由があります。 ''はJavaScriptで後でページに追加されますが、最初のHTMLコードを取得したときには実行されていません。 – pacha

+0

おそらく、ページには「JS」が使用されている可能性があります。この場合、リクエストは役に立たず、代わりに 'selenium'を使います。 –

答えて

0

YouTubeはJavascriptで大きく動作しています。私はセレンを使用することをお勧めします。

from selenium import webdriver 
from bs4 import BeautifulSoup 

youtube = "https://www.youtube.com/results?search_query=" 

def get_address(keyword): 
    query = youtube + keyword 
    browser = webdriver.Chrome() 
    browser.get(query) 
    plain_text = browser.page_source 
    browser.quit() 
    soup = BeautifulSoup(plain_text, "html.parser") 

    for link in soup.findAll('a', {'id': 'video-title'}): 
     href = link.get('href') 
     print(href) 

get_address("scishow") 
関連する問題