首页 > 解决方案 > Scrapy:从页面内容派生的字段名称

问题描述

我正在查看按以下方式构造的页面,尽管确切的元素可能不是table. 一般来说,每页key-value pairskeys数量最多限制为 3 个(但不一定按特定顺序),并且keys因页面而异(否则我无法知道所有这些keys可能是什么没有预先抓取所有可能的页面)。此外,同一页面中不应有重复的键(例如,A -> 1、B -> 2、A -> 3)。我没有使用 XPath 从页面中分离键和值的问题,只是在从我的 Spider 中存储和导出值时。

在此处输入图像描述

方法一

如果我使用dictionary类似这样的伪代码的方法:

    for th, td in table:
        item[th.text()] = td.text()

然后结果将仅显示 A、B、C 的值,因为这些值存在于处理的第一页中,并且仅维护第一个请求的标头和值

方法二

如果我将scrapy.item.Item()andscrapy.item.Field()方法用于这样的事情:

    class MyItem(Item):
        A = Field()
        B = Field()
        C = Field()

然后我无法为未知值声明一个值(显示为...)。并且在尝试设置值时(直接或使用 ItemLoader.add_value())我会收到 KeyError。

我正在使用Python 3.8Scrapy 2.4.1

标签: python-3.xweb-scrapingscrapyscrapy-item

解决方案


推荐阅读