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

BeautifulSoup使用select按CSS类名查找元素返回空列表如何解决

问题排查结果

你的代码语法没有错误,返回空列表的核心原因是目标站点为单页应用(SPA),所有页面内容依赖客户端JS动态渲染生成。requests.get() 只能获取到服务端返回的初始静态HTML,这份HTML里还没有生成带有.ant-card-body类的DOM节点,因此BeautifulSoup无法匹配到对应元素。
另外你请求的URL里#后的哈希路由部分不会被requests传递给服务端,不过这不是本次问题的核心原因,模拟浏览器时会自动处理哈希路由的逻辑。

可行解决方案
  • 方案一:使用模拟浏览器工具爬取动态渲染内容
    可以使用Selenium、Playwright等工具模拟浏览器运行,等待页面JS执行完成、元素渲染完毕后再提取内容,以下是Playwright的示例代码:
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

url = "https://solanamonkeysclub.com/#/#mint"

with sync_playwright() as p:
    # 启动无头浏览器
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(url)
    # 等待目标元素渲染完成,最多等待10秒
    page.wait_for_selector('.ant-card-body', timeout=10000)
    # 获取渲染完成后的页面HTML
    html = page.content()
    browser.close()

soup = BeautifulSoup(html, 'html.parser')
new_elems = str(soup.select('.ant-card-body'))
print(f'{"new_elem":10} : {new_elems}')
  • 方案二:直接调用后端接口获取数据
    打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR类型的请求,刷新页面后找到返回卡片数据的后端接口,直接请求该接口获取结构化数据,该方案效率远高于渲染页面后提取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:36:05