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
相关产品推荐
相关产品推荐

