YouTube的HTML有一些自定义元素,比如yt-formatted-string
,你可以看到,如果没有youtube的javascript,你不能在HTML
解析器中解码,beautifulsoup4
解析错误。
代码如下:
from bs4 import BeautifulSoup
import requests
url = "https://www.youtube.com/watch?v=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年前
[编辑结束]
因此,当我尝试检索视图计数时,它返回None。有可能解决吗?
我尝试逐个执行此操作,首先获取信息容器,然后是另一个元素,然后是视图计数,但它返回NoneType object has no attribute find.
我还尝试列出所有span并提取具有视图的span,但这是低效的,令人困惑的,并且失败了。
1条答案
按热度按时间v8wbuo2f1#
@Rayaankhan,因为涉及
javascript
,请求lib不支持。这就是为什么你得到不同的HTML
内容。但是,您仍然可以在其中一个script
标记中获取所有数据,并且数据位于需要解析的深度嵌套JSON
中- Ajeet Verma。正如您在Ajeet的评论中看到的,请求库不返回javascript,因此我需要从外部获取javascript并使用它呈现HTML
。