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

使用BeautifulSoup提取HTML中tixStockRoe对应数值失败如何解决

问题原因

目标站点的ROE数值属于前端异步动态渲染的内容:你用requests.get拿到的只是服务端返回的初始静态HTML,此时页面还没执行JavaScript脚本去请求后端接口获取真实的ROE数据,初始HTML里对应的位置只有加载占位的loader元素,所以你没法直接从requests返回的内容里提取到数值。

解决方案

方案1:使用模拟浏览器工具(适合快速实现,不需要分析接口)

用Selenium、Playwright这类工具模拟真实浏览器的运行逻辑,等待页面JS执行完成、数据渲染完毕后再提取内容,示例代码如下:

from bs4 import BeautifulSoup as BS
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 引入显式等待相关依赖可替换硬编码的sleep,提升运行效率
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

# 配置无头浏览器参数
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")

driver = webdriver.Chrome(options=chrome_options)
url = "https://www.bursamarketplace.com/mkt/themarket/stock/SUPM"
driver.get(url)

# 等待目标元素加载出非loader的文本内容,最多等10秒
wait = WebDriverWait(driver, 10)
target_ele = wait.until(
    lambda d: d.find_element(By.CSS_SELECTOR, 'div[name="tixStockRoe"].value').text.strip() != ''
)

html_content = driver.page_source
soup = BS(html_content, 'lxml')
val = soup.find('div', {'name': "tixStockRoe", 'class':"value"})
if val:
    roe_value = val.text.strip()
    print(roe_value)

driver.quit()

方案2:直接请求异步接口(适合高性能批量抓取)

打开浏览器F12开发者工具,切换到「网络」面板,筛选XHR/fetch请求,刷新页面后找到返回ROE等股票数据的后端接口,直接构造请求调用接口拿JSON格式的返回数据,不需要解析HTML,运行效率更高。

学习资源推荐

  • 入门阶段:优先看Python爬虫相关的入门实体书/在线教程,覆盖HTTP基础、requests库用法、BeautifulSoup解析逻辑即可,多做静态站点抓取的实操练习
  • 进阶阶段:逐个啃对应工具的官方文档,遇到反爬、动态渲染等场景时针对性学习Selenium/Playwright、异步请求、代理池等相关技术
  • 实操练习:可以从公开的信息展示类静态站点入手练习,熟练基础逻辑后再接触有反爬、动态渲染的站点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:36:01