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

Scrapy爬取数据触发Unshapable list错误 输出格式不符合预期

Scrapy提取网页出现Unshapable list报错修复方案

问题背景

import scrapy
from scrapy.http import Request
from scrapy.crawler import CrawlerProcess

class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://rejestradwokatow.pl/adwokat/list/strona/1/sta/2,3,9']
    custom_settings = {
        'CONCURRENT_REQUESTS_PER_DOMAIN': 1,
        'DOWNLOAD_DELAY': 1,
        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
        }

    def parse(self, response):
        wev={}
        tic = response.xpath("//div[@class='line_list_K']//div//span//text()").getall()
        det = response.xpath("//div[@class='line_list_K']//div//div//text()").getall()
        wev[tuple(tic)]=[i.strip() for i in det]
        
        yield wev
  • 错误表现:运行后输出格式异常,触发Unshapable list报错,错误输出效果:当前错误输出
  • 预期目标:输出字段名与值一一匹配的结构化字典,效果参考:预期输出效果

报错原因

原有逻辑一次性全局提取所有span节点的文本作为字段名集合、所有div节点的文本作为值集合,存在两个核心问题:

  1. 把整个字段名元组作为字典的key,不符合Scrapy Item输出的格式要求,直接触发Unshapable list报错
  2. 全局跨节点提取没有绑定字段和值的对应关系,很容易因为页面DOM结构差异、空节点、多值节点出现键值数量不匹配、内容错位的问题。

修复代码

核心调整为逐行遍历信息条目容器,在单个条目内配对提取字段名和对应值,从根源避免错位和格式错误:

def parse(self, response):
    wev = {}
    # 遍历信息区每一行条目,每个条目对应一组键值对
    for row in response.xpath("//div[@class='line_list_K']/div"):
        # 提取当前行字段名,去除空白和末尾冒号
        key = row.xpath(".//span/text()").get(default="").strip().rstrip(":")
        if not key:
            continue
        # 提取当前行所有有效值,自动过滤空文本
        values = [txt.strip() for txt in row.xpath(".//div//text()").getall() if txt.strip()]
        # 单值字段存字符串,多值字段(比如多个邮箱、多个执业方向)存列表
        wev[key] = values[0] if len(values) == 1 else values
    yield wev

修复效果

  • 彻底解决Unshapable list报错,输出格式完全符合结构化字典要求
  • 键值严格一一对应,不会出现内容错位、字段缺失问题
  • 自动兼容单值、多值字段场景,和预期输出格式完全对齐

内容的提问来源于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:45:31