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

Le programme se déroule avec succès, mais au lieu de montrer l'adresse de la vidéo, il ne montre rien dans la sortie.Pourquoi aucune sortie n'apparaît dans ce robot d'exploration YouTube en python?

+0

Votre code est bon, la seule raison pour laquelle il ne montre rien dans la sortie est parce que la balise 'a' que vous cherchez n'est pas là. Le '' est ajouté à la page plus tard avec JavaScript, ce qui bien sûr n'a pas été exécutée lorsque vous récupérez le code HTML initial. – pacha

+0

Probablement parce que la page utilise 'JS'. Demande sera inutile dans ce cas, utilisez 'selenium' à la place. –

Répondre

0

Youtube fonctionne beaucoup sur javascript. Je vous suggère d'utiliser du sélénium. Voici votre code mis à jour:

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