我正在解析一个页面,但ID喜欢将其分成几个部分,该页面包含有关多个会议的信息。有些信息对所有会议都是通用的,但并非一切。所以我为一般信息制作了一个项目加载器,并为特定信息制作了一个。但是,我希望这个解析器返回与会议有关的所有信息(即:一般和具体)。这是我的代码的解析方法:
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()字典更新或合并它。
在这里,我被困住了:
提前感谢任何指示或建议,我有点失落:)
答案 0 :(得分:4)
我认为没有办法将两个加载器实际合并为scrapy,但您可以使用从它们创建的词典:
...
general_item = general_loader.load_item()
specific_item = specific_loader.load_item()
general_item.update(specific_item)
yield general_item