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

使用BeautifulSoup爬取网页时目标span标签返回空内容问题求助

问题原因

requests 仅能获取服务器返回的初始静态HTML源码,不会执行页面内嵌的JavaScript代码。你在浏览器元素检查面板看到的#debitorer_name1标签内的文本,是页面初始加载完成后,由JS动态拉取数据填充进去的,初始静态源码里该标签本身就是空的,因此直接用requests爬取只能拿到空标签。

解决方案

你可以根据实际场景二选一:

  • 方案1:直接请求动态数据接口(优先推荐,性能最高)
    打开浏览器开发者工具,切换到「网络」面板,筛选Fetch/XHR类型请求,刷新页面后逐个查看响应内容,找到返回目标名称文本的接口,后续直接用requests请求该接口即可拿到数据,无需解析完整HTML,爬取效率最高。
  • 方案2:使用支持JS渲染的爬虫工具
    如果接口参数加密难以直接逆向,可使用能模拟浏览器执行JS的工具加载页面,等JS渲染完成后再提取内容,以Playwright为例:
    1. 先安装依赖:
    pip install playwright beautifulsoup4
    playwright install chromium
    
    1. 可直接运行的示例代码:
    from bs4 import BeautifulSoup
    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as pw:
        # 启动无头浏览器
        browser = pw.chromium.launch(headless=True)
        page = browser.new_page(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
        )
        # 访问目标页面
        page.goto("https://www.nummerplade.net/nummerplade/Dd97487.html")
        # 等待目标标签加载出非空内容
        page.wait_for_selector("#debitorer_name1:not(:empty)")
        # 获取JS渲染完成后的完整页面源码
        rendered_html = page.content()
        browser.close()
    
    soup = BeautifulSoup(rendered_html, "html.parser")
    name = soup.find("span", id="debitorer_name1")
    print(name.text)
    

注意:爬取时建议携带真实浏览器的User-Agent等请求头,模拟正常用户访问特征,避免被站点反爬策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:51:24