You need to enable JavaScript to run this app. 爬取页面时用BeautifulSoup获取span标签内容返回空值的问题
优惠活动
大模型
产品
解决方案
定价
更多

爬取页面时用BeautifulSoup获取span标签内容返回空值的问题

问题成因
  • 浏览器元素检查器中显示的class="c13VH6"价格节点,是页面加载完成后由前端JS动态渲染生成的内容,不存在于requests请求获取的初始静态HTML响应中,因此调用BeautifulSoup匹配时会返回空值。
  • 现有代码存在两个基础错误:
    • 请求URL存在代码换行折行,spm跟踪参数被截断,会导致请求返回异常的空壳页面
    • 请求头仅携带User-Agent,缺少电商站点反爬校验的必要字段,后端会直接返回不含核心商品内容的静态页面
  • 这类电商平台的核心商品列表数据,本身就不会直接嵌入到初始HTML中,统一通过异步接口拉取后再渲染到DOM上,静态请求天然拿不到这部分内容。
对应解决方法

1. 修正代码基础问题

  • 把原代码里折行的请求URL拼接为完整无换行、无多余空格的字符串,保证请求路径和目标地址完全一致
  • 补全请求头的必要字段,匹配真实浏览器的请求特征:
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.9',
        'Referer': 'https://www.daraz.com.np/'
    }
    

2. 适配动态内容的获取逻辑

静态requests请求无法拿到JS渲染后的DOM内容,可根据实现成本选择两种方案:

  • 低维护成本方案:逆向异步数据接口
    打开浏览器开发者工具的网络面板,筛选XHR类型请求,刷新电视分类页面后,定位到返回商品列表结构化JSON数据的接口,直接携带正确的请求头、请求参数调用该接口,从返回的JSON字段中直接提取商品名称、对应价格,跳过HTML解析环节,运行效率最高。
  • 零逆向成本方案:模拟浏览器加载
    选用playwright或selenium这类可以启动真实浏览器的工具,加载目标分类页面后等待商品列表节点完全渲染完成,再通过CSS选择器匹配所有带c13VH6类的span节点,直接读取节点文本即可拿到价格信息。

3. 提取逻辑优化

拿到渲染后的完整DOM后,不要只匹配第一个价格节点,改用soup.find_all('span', class_='c13VH6')获取全量价格节点,再匹配同列表容器下的商品名称节点,即可批量拿到全部分类下的商品名称和对应价格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 06:54:03