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

Python Scrapy提取xpath节点文本时get/extract返回空如何解决

Scrapy 提取kanjiicon文本为空问题修复方案

问题核心原因

  • 循环内XPath使用//开头为全局搜索,不会限定在当前遍历的kanji节点范围内,导致匹配逻辑错误
  • 原XPath未添加/text()规则,无法获取节点内的文本内容
  • 外层节点匹配路径过于宽泛,会匹配大量无关节点,干扰结果提取

修复后完整代码

import scrapy


class WanikaniSpider(scrapy.Spider):
    name = 'japandict'
    allowed_domains = ['www.japandict.com']
    start_urls = ['https://www.japandict.com/lists/jlpt5k']
    
           
    def parse(self, response):
        # 直接精准匹配所有kanji所在的卡片节点
        kanjiler = response.xpath("//div[contains(@class, 'card')]")
        for kanji in kanjiler:
            # 用.开头的相对路径,限定在当前kanji节点下搜索,加/text()取文本
            kanjiicon = kanji.xpath(".//a/div/span/text()").get()
            # 跳过空匹配的无关节点
            if kanjiicon:
                yield{
                    'kanjiicon': kanjiicon.strip()
                }

改动说明

  • 外层节点直接匹配div.card,过滤无关内容,减少无效遍历
  • 内层XPath以.开头,限定搜索范围为当前遍历的卡片节点
  • 新增/text()获取span节点内的文本内容
  • 调用.get()方法从Selector对象中提取字符串,加.strip()去除首尾空白字符
  • 新增非空判断,过滤无匹配结果的无效数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:30:05