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

使用BeautifulSoup爬取网页时HTML元素缺失、div#root为空问题求助

问题原因

你遇到的是典型的客户端渲染单页应用(SPA)爬取问题:GOAT这类站点的核心内容不会在首次HTML请求时直接返回,初始HTML里<div id="root"></div>只是占位容器,页面实际内容需要浏览器加载执行完配套的JS代码后,才会动态填充到root标签内。而requests库只能拿到初始静态HTML,不会执行JS,因此拿到的root标签为空。

可行解决方案

你可以选择以下两种方案中的任意一种解决问题:

  • 方案1:使用无头浏览器模拟真实浏览器运行环境,自动执行页面JS获取渲染完成的页面内容。
    这里给你基于Selenium的修改示例代码:

    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    
    def findShoeNames():
        # 配置无头Chrome
        chrome_options = Options()
        chrome_options.add_argument("--headless=new")
        # 模拟普通浏览器的UA,避免被反爬拦截
        chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
        
        driver = webdriver.Chrome(options=chrome_options)
        driver.get('https://www.goat.com/sneakers/brand/air-jordan')
        # 等待页面JS加载渲染完成,可根据实际网速调整等待时长
        time.sleep(3)
        
        soup = BeautifulSoup(driver.page_source, 'lxml')
        print(soup.find(id="root"))
        driver.quit()
    
    if __name__ == "__main__":
        findShoeNames()
    

    使用前需要先安装依赖:pip install selenium beautifulsoup4,同时保证你的Chrome浏览器和对应版本的ChromeDriver已配置好。

  • 方案2:直接抓取站点数据接口
    打开浏览器开发者工具的「网络」面板,筛选「Fetch/XHR」请求,刷新页面后就能找到站点用来加载球鞋数据的后端接口,这类接口一般返回JSON格式数据,你可以直接用requests请求该接口拿到结构化的球鞋信息,效率比解析HTML更高。
    请求接口时注意在headers里带上和浏览器一致的User-Agent、Referer等参数,避免被站点反爬策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:24:03