You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页爬取中用span解析HTML获取浏览数返回None的问题求助

问题分析与解决办法

核心问题:动态内容无法通过静态请求获取

你用requests.get()拿到的是网站的初始静态HTML,而Kommersant文章的浏览数是通过JavaScript动态加载的——也就是说,这个数据不会出现在初始HTML里,而是页面加载完成后,浏览器执行JS脚本从后端接口拉取并渲染到页面上。所以不管怎么用BeautifulSoup解析静态HTML,都找不到目标元素。

另外你的代码还有两个小问题:

  • 第二个代码片段里,find_all的参数名应该是attrs而非attr,而且代码末尾缺少闭合括号,会直接报错。
  • BeautifulSoup的解析器推荐用'html.parser'(Python内置)或'lxml'(需要额外安装),而非'html'。

解决方案

方案1:用Selenium模拟浏览器渲染(适合新手)

Selenium会打开真实浏览器,等待页面JS执行完成后再提取数据,步骤如下:

  1. 安装Selenium和对应浏览器的驱动(比如ChromeDriver)
  2. 编写代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.kommersant.ru/doc/4638344'
driver = webdriver.Chrome()  # 确保ChromeDriver已在系统PATH中
driver.get(url)

# 等待浏览数元素加载完成
view_count_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'sharing'))
)
print(view_count_element.text)

driver.quit()

方案2:直接调用API接口(更高效)

打开浏览器开发者工具(F12),切换到「网络」标签页,刷新页面后可以找到加载浏览数的API请求。比如这个页面的浏览数接口通常是类似https://www.kommersant.ru/frontend/api/v1/documents/{doc_id}/stats的地址,直接请求这个接口就能拿到JSON格式的统计数据:

import requests

doc_id = '4638344'
api_url = f'https://www.kommersant.ru/frontend/api/v1/documents/{doc_id}/stats'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

response = requests.get(api_url, headers=headers)
data = response.json()
print(f"浏览数:{data['views']}")

注意:网站的API接口可能会随时调整,需要你自己通过开发者工具确认最新的接口地址和请求参数。

内容的提问来源于stack exchange,提问作者Artem Gorbunov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:55:34