0
我正在解析一个页面,但id喜欢把它分成几个部分,页面上有多个会议的信息。一些信息对所有会议都很常见,但并非全部。所以我做了一个项目加载器的一般信息和一个具体的信息。不过,我希望这个解析器返回与会议有关的所有信息(即:一般的和特定的)。这里是我的代码的解析方法:单个解析方法中的两个scrapy项目加载器?如何合并它们?
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。
所以我在这里要做的是使用会议作为第二个ItemLoader的响应,我称之为specific_loader。由于general_loader.load_item()似乎返回一个字典,我尝试使用specific_loader.load_item()字典进行更新或合并。
这里就是我坚持:
- 更新方法不工作的load_item,我似乎无法这两件事情合并。
- 显然我不能在加载器响应中使用response.xpath()(我正在使用会议)元素?
- 最后,必须有更好的方法来实现这一点,我试过嵌套装载机,他们似乎很有前途,但会见变化。它遍历response.xpath(self.meeting_xpath)列表,所以我如何使用嵌套的加载器?
预先感谢任何指针或建议,我有点失去:)
这是行不通的。这正是我试图用最后一行代码所做的。任何其他想法? –
为什么它不工作?你在代码中没有做同样的事情,你不能返回(或产生)'dict.update()',因为'update'不会返回一个字典,它只会更新当前对象。 – eLRuLL
Ohhhhhh我不知道'更新'改变了字典。谢谢@eLRuLL –