gpt4 book ai didi

python - 所需项目不在汤对象中 - BeautifulSoup Python

转载 作者:行者123 更新时间:2023-12-04 01:02:06 26 4
gpt4 key购买 nike

所以我想从这个链接中提取“bilibili-player-video-info-people-number”: https://www.bilibili.com/video/BV1a44y167wK .当我创建我的 beautifulsoup 对象并搜索它时,这个类不存在。是解析器的原因吗?我确实尝试了 lxml 和 html5lib,但都没有更好的效果。

<span class="bilibili-player-video-info-people-number">585</span>

这就是我要提取的完整元素 - 数字每分钟更新一次以显示当前有多少人正在观看。

import time
from bs4 import BeautifulSoup
from selenium import webdriver
import re
import html5lib

driver = webdriver.Chrome(r'C:\Users\Rob\Downloads\chromedriver.exe')

driver.get('https://www.bilibili.com/video/BV1a44y167wK')

content = driver.page_source.encode('utf-8').strip()
soup = BeautifulSoup(content, 'html5lib')

viewers = soup.findAll('span', class_='bilibili-player-video-info-people-text')

print(viewers[0])

print(viewers[0]) 返回超出范围的错误,因为查看器对象中没有任何内容。

谢谢!

最佳答案

几乎整个网站都在 JavaScript 的支持下,所以 bs4 没用,除非你想要的元素在请求的 HTML。在您的情况下,不是

但是,您可以查询一个 API 端点,它携带此数据(以及更多)。

通过一些 regexrequests,您可以获得在线人数(观众)。

方法如下:

import re

import requests

with requests.Session() as connection:
page_url = "https://www.bilibili.com/video/BV1a44y167wK"
page = connection.get(page_url).text
cid = re.search(r"cid\":(\d+),\"page", page).group(1)
aid = re.search(r"aid\":(\d+),", page).group(1)
url = f"https://api.bilibili.com/x/player/v2?cid={cid}&aid={aid}&bvid={page_url.rsplit('/', 1)[-1]}"
print(connection.get(url).json()["data"]["online_count"])

输出(注意:它可能会随着观众来来去去而改变):

562

关于python - 所需项目不在汤对象中 - BeautifulSoup Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67949200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com