2017-09-03 169 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")