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

Scrapy中使用response.xpath如何获取数字类型返回值

问题原因

你提取到的{FirstPrize}是前端页面模板的占位字符,目标数值0156是页面加载完成后通过JavaScript动态渲染填充的,Scrapy默认仅请求初始静态HTML,不会执行页面JS,因此无法直接拿到渲染后的数值。
另外你当前使用的XPath是按data-prize-type属性筛选节点,和你描述的目标节点class属性不符,也会存在筛选到错误节点的可能。

可选解决方案
  • 方案1:请求后端数据源接口
    打开浏览器开发者工具的「网络」面板,刷新页面后筛选XHR/ Fetch类型的请求,查找返回开奖数值的后端接口,直接用Scrapy请求该接口解析JSON数据即可,该方法效率最高、性能消耗最小。
  • 方案2:搭配JS渲染工具提取
    若接口有加密逻辑无法直接请求,可以集成scrapy-playwright或scrapy-splash等支持JS渲染的组件,等页面完整渲染后再提取内容,正确的XPath筛选规则参考如下:
    # 需提前在settings.py中完成对应渲染组件的配置
    target_num = response.xpath('//span[contains(@class,"result-number-lg") and contains(@class,"btn-number-details")]/text()').get().strip()
    
  • 方案3:从内嵌JS脚本中提取原始值
    动态渲染的数值通常会提前写在页面内嵌的<script>标签中,可以直接匹配该脚本内容提取数值,示例代码:
    import re
    # 提取包含奖项数据的JS脚本内容
    js_content = response.xpath('//script[contains(text(), "FirstPrize")]/text()').get()
    # 正则匹配一等奖数值
    target_num = re.search(r'FirstPrize\s*[:=]\s*["\']?(\d+)["\']?', js_content).group(1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:01