【发布时间】:2016-12-16 05:12:45
【问题描述】:
我正在解析一个页面,但我喜欢将其划分为多个部分,该页面包含有关多个会议的信息。某些信息对所有会议都是通用的,但并非所有信息。所以我为一般信息和特定信息制作了一个项目加载器。但是,我希望此解析器返回与会议有关的所有信息(即:一般信息和特定信息)。这是我的代码的解析方法:
def parse(self, response):
general_loader = ItemLoader(item=ProductItem(), response=response)
general_loader.default_input_processor = MapCompose(unicode.strip)
general_loader.default_output_processor = Join(" & ")
for field, xpath in self.general_item_fields.iteritems():
general_loader.add_xpath(field, xpath)
for meeting in response.xpath(self.meeting_xpath):
specific_loader = ItemLoader(item=ProductItem(), response=meeting)
specific_loader.default_input_processor = MapCompose(unicode.strip)
specific_loader.default_output_processor = Join(" & ")
for field, xpath in self.specific_item_fields.iteritems():
specific_loader.add_xpath(field, xpath)
yield general_loader.load_item().update(specific_loader.load_item())
变量specific_item_fields和general_item_fields是带有会议属性的字典,是xpath。
所以我在这里尝试做的是使用会议作为我称为 specific_loader 的第二个 ItemLoader 的响应。由于 general_loader.load_item() 似乎返回了一个字典,我尝试将它与 specific_loader.load_item() 字典更新或合并。
这就是我卡住的地方:
- 更新方法对 load_item 不起作用,我似乎无法合并这两件事。
- 显然我不能使用 response.xpath() (我在这里使用会议)元素作为加载程序响应?
- 最后必须有更好的方法来实现这一点,我尝试了嵌套加载器,它们看起来很有希望,但会遇到变化。它在 response.xpath(self.meeting_xpath) 列表中循环,所以我如何使用嵌套加载器?
提前感谢您的任何指示或建议,我有点迷路了:)
【问题讨论】:
标签: python dictionary xpath scrapy generator