Scrapy合并多个流程中的项目

时间:2019-01-11 05:16:35

标签: python scrapy

我有一个令人毛骨悚然的脚本

  1. 在xml文件中查找所有“ 页面”节点
  2. 解析所有这些页面,收集数据,查找其他页面
  3. 进一步解析其他页面并收集信息

Scrapy脚本:

class test_spider(XMLFeedSpider):
 name='test'
 start_urls=['https://www.example.com'] 
 custom_settings={
  'ITEM_PIPELINES':{
   'test.test_pipe': 100,
  },
 }
 itertag='pages'  
 def parse1(self,response,node):
  yield Request('https://www.example.com/'+node.xpath('@id').extract_first()+'/xml-out',callback=self.parse2)
 def parse2(self,response):
  yield{'COLLECT1':response.xpath('/@id').extract_first()} 
  for text in string.split(response.xpath(root+'/node[@id="page"]/text()').extract_first() or '','^'):
   if text is not '':
    yield Request(
     'https://www.example.com/'+text,
     callback=self.parse3,
     dont_filter=True
    )
 def parse3(self,response):
  yield{'COLLECT2':response.xpath('/@id').extract_first()} 
class listings_pipe(object):
 def process_item(self,item,spider):
  pprint(item)

理想的结果将与诸如

  

{'COLLECT1':'一些数据','COLLECT2':['一些数据','一些数据',...]}

在每个parse1事件之后是否有一种调用管道的方法?并获得物品的综合格言?

1 个答案:

答案 0 :(得分:2)

在您的Parse2方法中,使用meta,然后使用collection1parse3传递给meta。然后在Parse3中获取您的collection1extract您的collection2并根据需要产生合并结果。

有关meta的更多信息,您可以阅读here