2017-09-03 2 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 크롤러에 파이썬으로 출력이 표시되지 않습니까?

+0

찾고있는 'a' 태그가 없기 때문에 코드에 문제가없는 것은 출력에 아무 것도 표시되지 않는 유일한 이유입니다. ''는 나중에 자바 스크립트로 페이지에 추가됩니다. 초기 HTML 코드를 가져올 때 물론 실행되지 않았습니다. – pacha

+0

아마도 페이지가 'JS'를 사용하고 있기 때문일 수 있습니다. 이 경우 요청은 쓸모 없게됩니다. 대신'셀렌 '을 사용하십시오. –

답변

0

Youtube가 자바 스크립트에서 많이 실행됩니다. 셀렌을 사용하는 것이 좋습니다. 업데이트 된 코드는 다음과 같습니다.

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