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

Scrapy使用xpath提取ld+json后执行json.loads报错如何处理

问题原因

报错主要来自两个常见场景:

  • 目标页面没有对应ld+json标签时,extract_first()会返回None,直接传入json.loads()会触发类型错误
  • 就算成功拿到ld+json内容,也可能存在结构缺失的情况,比如没有author、editor字段,直接用[]取键会触发KeyError

解决方法

你可以分层加判断处理边界情况,示例修改代码如下:

import json

jsondata = response.xpath('//script[@type="application/ld+json"]/text()').extract_first()
# 先判断是否拿到了ld+json内容
if not jsondata:
    # 没有对应内容时可以赋值默认值,或者走其他自定义提取逻辑
    author = editor = daten = None
else:
    try:
        microdata = json.loads(jsondata)
    except json.JSONDecodeError:
        # 处理json格式不合法的异常情况
        author = editor = daten = None
    else:
        # 用字典的get方法取键,避免KeyError,没有对应字段时默认返回None
        author = microdata.get("author", {}).get("name")
        editor = microdata.get("editor", {}).get("name")
        daten = microdata.get("datePublished")

如果需要在没有对应数据时跳过当前页面处理,可以直接在判断jsondata为空的时候用return终止当前解析逻辑,管道处理场景下也可以抛出DropItem过滤无效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:36:03