Python: Beautifulsoup возвращает None или [] - PullRequest
0 голосов
/ 30 декабря 2018

Здравствуйте, я практикую свои запросы и навыки работы с веб-страницами, поэтому я пытаюсь почистить трендовую страницу на YouTube и получить название видео, которые находятся в тренде, по этой ссылке youtube

это код, который я запускаю

import requests
from bs4 import BeautifulSoup

url = 'https://www.youtube.com/feed/trending'
html = requests.get(url)
soup = BeautifulSoup(html.content, "html.parser")
a = soup.find_all("a", {"id": "video-title"})
print(a)

и его возврат [], я не понимаю, почему он возвращает [], когда его в исходном коде,

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Вам может понадобиться метод, подобный селену, который дает время для полной визуализации страницы.Следующее в настоящее время дает 70 названий.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = 'https://www.youtube.com/feed/trending'

d = webdriver.Chrome()
d.get(url)
titles = [title.text for title in WebDriverWait(d,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#video-title")))]
print(titles)
d.quit()
0 голосов
/ 30 декабря 2018

Сеть превращается в то, что становится все более непостижимой.«Современные» веб-страницы, по большей части, больше не генерируются сервером, поскольку их увидит пользователь;скорее, сценарии отправляются пользователю и в основном вводят все, что угодно ¯ \ _ (ツ) _ / ¯, в DOM.

Вот почему вам нужно использовать привязки Selenium с полнофункциональным браузером., как упоминалось выше QHarr.

Мои извинения за то, что я не сделал этого комментария, но, очевидно, мне нужно 50 баллов, чтобы сделать это.

0 голосов
/ 30 декабря 2018

вывести содержимое переменной html.content - содержит ли он этот идентификатор?

Моя ставка - нет, youtube.com - сайт, сильно зависящий от JavaScript, но модуль requests не имеет движка js.То, что видит ваш браузер, обычно не то, что видит модуль типа requests.

...