python-3.x - Scrapy:从页面内容派生的字段名称
问题描述
我正在查看按以下方式构造的页面,尽管确切的元素可能不是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
。
解决方案
推荐阅读
- asp.net-core - Replace cyrilic symbols in Nlog output
- angular - how to get value from custom input component in directive in anglar7?
- visual-studio-code - 是否可以在 vscode 中配置预执行脚本?
- javascript - 从 Highchart Angular 中的 csv 文件中读取数据
- java - 我们如何将任务安排为 24 小时以在 24 小时内执行并将响应存储在变量中?
- docker - 如何在 docker 容器中使用 cron 运行 python 代码?
- c++ - 为什么使用cuda-memcheck有错误提示,直接运行程序没有错误
- angular - Angular - 将下拉列表附加到 div
- javascript - TypeError:_this2.input.current.focus 不是函数
- node.js - 节点:在生产中使用非 LTS 版本的节点是不是很糟糕?