首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汤对象中不需要的项- BeautifulSoup Python

汤对象中不需要的项- BeautifulSoup Python
EN

Stack Overflow用户
提问于 2021-06-12 13:14:08
回答 2查看 58关注 0票数 3

所以我想从这个链接中提取“bilibili-player-视频-info-people-number”链接:https://www.bilibili.com/video/BV1a44y167wK。当我创建我的漂亮汤对象并搜索它时,这个类就不在那里了。是解析器造成的吗?我确实尝试了lxml和html5lib,但也没有做得更好。

代码语言:javascript
复制
<span class="bilibili-player-video-info-people-number">585</span>

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

代码语言:javascript
复制
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])返回一个超出范围的错误,因为查看器对象中没有任何内容。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-12 14:21:24

几乎整个站点都在JavaScript后面,所以bs4是无用的,除非您想要的元素在请求的HTML中。在你的情况下,不是。

但是,您可以查询一个API端点,它包含这些数据(以及更多的数据)。

只要有一点regexrequests,你就可以获得(观看者的)在线计数。

下面是操作步骤:

代码语言:javascript
复制
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"])

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

代码语言:javascript
复制
562
票数 3
EN

Stack Overflow用户

发布于 2021-06-12 19:56:54

我确实设法解决了以下问题:

代码语言:javascript
复制
    html = driver.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
    start = re.search('<span class="bilibili-player-video-info-people-number">(.*)</span>',html)

第一个命令从网页中获取所有html并将其存储在一个名为html的字符串中,第二个命令搜索我想要的非常具体的部分,并在其中找到数字。不知道这是否是最好的方式,但它是有效的,并感谢大家的意见。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67949200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档