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

Scrapy中如何用CSS选择器处理标签间的缺失数据?

解决Scrapy抓取中空地址字段的处理问题

我来帮你搞定这个问题!你当前的代码存在两个主要问题:一是CSS选择器的类名大小写错误(HTML里是span.ans,但你写的是span.Ans),二是直接按索引提取文本的方式会因为空的ans标签导致数据错位,而且try-except的处理会丢失有效数据或者返回不规范的item。咱们换一种更可靠的方式来处理,保证即使地址为空也能保留空值,同时结构完全规范。

核心思路

不再依赖固定索引去取答案,而是把每个条目里的「问题标签(span.q)」和「答案标签(span.ans)」一一配对,这样不管哪个答案为空,都能准确对应到对应的字段上。

修改后的完整代码

class NmcSpider(scrapy.Spider):
    name = 'nmc'
    allowed_domains = ['nmc.org.np']
    start_urls = ['http://nmc.org.np/registered-practitioner.html']
    
    def parse(self, response):
        self.log('hello ' + response.url)
        for title in response.css('li.title'):
            # 1. 提取所有问题文本,处理成干净的键名(去掉末尾的冒号和空格)
            question_elements = title.css('span.q')
            field_keys = [
                q.css('::text').get(default='').strip().rstrip(':') 
                for q in question_elements
            ]
            
            # 2. 提取所有答案文本,空标签直接返回空字符串
            answer_elements = title.css('span.ans')
            field_values = [
                ans.css('::text').get(default='').strip() 
                for ans in answer_elements
            ]
            
            # 3. 将问题和答案配对成字典,保证一一对应
            data_map = dict(zip(field_keys, field_values))
            
            # 4. 构建规范的item,用get方法兜底,确保字段始终存在
            item = {
                'name': data_map.get('Name', ''),
                'address': data_map.get('Address', ''),
                'gender': data_map.get('Gender', ''),
                'degree': data_map.get('Degree', ''),
                'nmc_no': data_map.get('NMC No', '')
            }
            
            yield item

关键改进点说明

  • 修正CSS选择器:把span.Ans改成span.ans,匹配HTML里的实际类名,这是原代码可能取不到数据的关键原因之一。
  • 避免索引错位:通过遍历所有ans元素来提取文本,即使标签为空,也会在field_values里保留一个空字符串,不会导致后续字段的索引偏移。
  • 字段配对更可靠:用dict(zip(field_keys, field_values))把问题和答案绑定,不管HTML里的条目顺序是否有变化(如果有特殊情况),都能准确对应到对应的字段。
  • 结构始终规范:用data_map.get(字段名, '')的方式获取值,即使某个字段不存在(比如部分条目没有性别信息),也会返回空字符串,保证item的结构完全一致。

内容的提问来源于stack exchange,提问作者the new guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:41:25