Scrapy结合了多个流程中的项目

问题描述 投票:1回答:1

我有一个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)

理想的结果将是组合dict项目,如

{'COLLECT1':'部分数据','COLLECT2':['某些数据','部分数据',...]}

有没有办法在每个parse1事件后调用管道?得到项目的组合词汇?

python scrapy
1个回答
2
投票

在你的Parse2方法中,使用meta并使用collection1parse3传递给meta。然后在Parse3获得你的collection1extract你的collection2并产生结合你想要的结果。

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

© www.soinside.com 2019 - 2024. All rights reserved.