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

Scrapy使用XPath提取Status字段返回空值问题排查

问题排查结论

你的XPath逻辑存在2处核心错误,导致无法提取到Status字段值:

  • 定位范围错误:循环统计到包含Status:的span索引后,使用//div[数字]是从整个HTML文档根节点全局查找第N个div,并非line_list_K容器下的对应行div,定位完全偏移。
  • 取值路径错误:目标站点详情页的字段值是直接跟在<span>标签后的同级文本节点,没有嵌套在子div标签内,查找子div文本的逻辑本身就匹配不到目标内容。
正确实现代码

直接通过XPath轴定位匹配目标字段,不需要遍历span算索引,鲁棒性更强,修正后的parse_book方法如下:

def parse_book(self, response):
    wev = {}
    # 直接定位Status字段,取span标签后的同级文本,normalize-space兼容多余空白字符
    status = response.xpath(
        "//div[@class='line_list_K']//span[contains(normalize-space(text()), 'Status:')]/following-sibling::text()"
    ).get(default='').strip()
    wev['status'] = status
    print(wev)

    # 如需批量提取该模块所有律师信息,可使用通用遍历逻辑,无需逐字段写XPath
    # for field_row in response.xpath("//div[@class='line_list_K']/div"):
    #     field_name = field_row.xpath("./span/text()").get(default='').strip().rstrip(':')
    #     field_value = field_row.xpath("./text()").get(default='').strip()
    #     if field_name:
    #         wev[field_name] = field_value
    # yield wev
效果验证

针对给出的测试详情页,上述代码可正确提取到status值为Wykonujący zawód,符合页面实际展示内容。如果后续要提取其他同模块字段,直接用注释里的通用遍历逻辑即可,不需要单独为每个字段写定位规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:57:21