python - Scrapy 合并来自多个进程的项目

标签 python scrapy

我有一个 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':'some data','COLLECT2':['some data','some data',...]}

有没有办法在每个 parse1 事件之后调用管道?并获取项目的组合字典?

最佳答案

在您的 Parse2 方法中,使用 meta 并使用 meta< 将 collection1 传递给 parse3/。然后在Parse3中获取您的collection1提取您的collection2并根据您的意愿产生组合结果。

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

关于python - Scrapy 合并来自多个进程的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54140716/

相关文章:

python - 如何将网页保存到其地址中包含 .aspx 的文件

python - sqlite3.ProgrammingError : You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings

python - AttributeError - QThread 和 Win32com

python - env/bin/python 和 env/lib/pythonX.Y 之间的区别(注意 lib)

python - PyMongo 在大量查询后引发 [errno 49] 无法分配请求的地址

Python 碎片 : 400 response from Form Request

python - 新手: How to scrape multiple web pages with only one start_urls?

python-2.7 - 使用 Python2 和 scrapy ImportError : cannot import name suppress

python - Xpath 获取具有特定字符串的标签及其所有后续兄弟,直到另一个特定字符串在标签中

python - Scrapy spider 不会因使用 CloseSpider 扩展而终止