我正在查看按以下方式构造的页面,尽管确切的元素可能不是table
. 一般来说,每页key-value pairs
的keys
数量最多限制为 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.8
和Scrapy 2.4.1
。