В HTML-коде YouTube есть некоторые пользовательские элементы, такие как yt-formatted-string, вы видите, что вы не можете декодировать его в синтаксическом анализаторе HTML без javascript youtube, beautifulsoup4 анализирует его неправильно.
Вот код:
from bs4 import BeautifulSoup
import requests
url = "https://thewikihow.com/video_S4E4yAktjug"
response = requests.get(url)
if response.status_code == 200:
doc = BeautifulSoup(response.text, "html.parser")
data_container = doc.find('div', {'id': 'info-container'})
print(data_container.prettify())
печатает это:
<div id = "info-container">
<div class = "skeleton-light-border-bottom" id = "primary-info">
<div class = "text-shell skeleton-bg-color" id = "title">
</div>
<div id = "info">
<div class = "text-shell skeleton-bg-color" id = "count">
</div>
<div class = "flex-1">
</div>
<div id = "menu">
<div class = "menu-button skeleton-bg-color">
</div>
<div class = "menu-button skeleton-bg-color">
</div>
<div class = "menu-button skeleton-bg-color">
</div>
<div class = "menu-button skeleton-bg-color">
</div>
<div class = "menu-button skeleton-bg-color">
</div>
</div>
</div>
</div>
<div class = "skeleton-light-border-bottom" id = "secondary-info">
<div id = "top-row">
<div class = "flex-1" id = "video-owner">
<div class = "skeleton-bg-color" id = "channel-icon">
</div>
<div class = "flex-1" id = "upload-info">
<div class = "text-shell skeleton-bg-color" id = "owner-name">
</div>
<div class = "text-shell skeleton-bg-color" id = "published-date">
</div>
</div>
</div>
<div class = "skeleton-bg-color" id = "subscribe-button">
</div>
</div>
</div>
</div>
[РЕДАКТИРОВАТЬ] Это ожидаемые значения:
2.4M views 1 year ago[Конец РЕДАКТИРОВАТЬ]
Итак, когда я пытаюсь получить количество просмотров, оно возвращается как None. возможно ли исправить?
Я пытался сделать это один за другим, сначала получая информационный контейнер, затем другой элемент, а затем внутри этого счетчика просмотров, но он вернулся NoneType object has no attribute find.
Я также попытался перечислить все промежутки и извлечь один с представлениями, но это было неэффективно, запутанно и не удалось.
Хорошо! через 20 минут вопрос будет исправлен
Вероятно дубликат: stackoverflow.com/questions/63402280/…
Попробуйте решение по ссылке выше, как сказал @dm2, количество не в полученном HTML. Вероятно, это связано с тем, что вы не вызываете JS, который генерирует номер.
@Rayaankhan, поскольку задействован javascript, а библиотека requests не поддерживает это. Вот почему вы получаете различный HTML-контент. Но вы по-прежнему получаете все данные внутри одного из тегов script, а данные находятся внутри глубоко вложенного тега json, который вам нужно будет проанализировать.






@Rayaankhan, поскольку здесь задействовано javascript, а библиотека запросов не поддерживает это. Вот почему вы получаете другой HTML контент. Но вы по-прежнему получаете все данные внутри одного из тегов script, а данные лежат внутри глубоко вложенного JSON, который вам нужно будет проанализировать —
Аджит Верма. Как вы видите в комментарии Аджита, библиотека запросов не возвращает javascript, поэтому мне нужно получить javascript извне и отобразить с ним HTML.
Я не вижу количество просмотров в предоставленном HTML-коде. Можете ли вы перепроверить, что это правильный код, и, возможно, указать, какое значение вы пытаетесь получить?