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

使用Beautiful Soup爬取巴西彩票页面遇渲染问题求助

解决Mega-Sena彩票页面金额爬取的Angular渲染问题

问题原因

这个页面用Angular框架开发,初始返回的静态HTML里只有模板表达式{{resultado.valorEstimadoProximoConcurso | currency}},实际金额数据是浏览器加载JavaScript后,从后端API获取并动态渲染到页面上的。BeautifulSoup只能解析静态HTML,无法执行JS,所以拿不到实际数值。

解决方案

方法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

# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()
driver.get("https://loterias.caixa.gov.br/Paginas/App/Mega-Sena.aspx")

# 等待目标元素加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
amount_element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "value.ng-binding")))

# 获取实际显示的金额文本
actual_amount = amount_element.text
print(actual_amount)

# 关闭浏览器
driver.quit()

方法2:直接调用后端API接口

打开浏览器开发者工具(F12),切换到「网络」面板,刷新页面后过滤XHR请求,就能找到页面获取数据的API接口。比如当前Mega-Sena的下期预估金额接口,直接用requests请求接口解析JSON即可拿到原始数值:

import requests

# 替换为实际找到的API接口URL
api_url = "https://loterias.caixa.gov.br/api/megasena/proximoConcurso"
response = requests.get(api_url)
data = response.json()

# 提取预估金额的原始数值
estimated_amount = data["valorEstimadoProximoConcurso"]
# 手动格式化为巴西货币样式
formatted_amount = f"R$ {estimated_amount:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")
print(formatted_amount)

两种方法对比

  • Selenium:不用找API,模拟真实浏览场景,兼容性好,但启动浏览器耗时久,资源占用高。
  • 直接调用API:速度快,资源消耗低,但需要手动找接口,接口可能随网站更新变化。

内容的提问来源于stack exchange,提问作者Tanise Brandão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:15:27