Scrapy-将刮取的数据返回到函数(Python)

Scrapy-将刮取的数据返回到函数(Python),python,python-3.x,web-scraping,scrapy,Python,Python 3.x,Web Scraping,Scrapy,有没有一种方法可以向python生成器发出请求,让该生成器发出多个函数来收集特定dict的数据,然后将该信息返回到原始请求?最好是通过以下方式完成大部分工作 如果这是一个愚蠢的问题,请原谅,我使用Python的经验有点有限,异步编程让我有点困惑 这是一个与我试图实现的目标非常相似的想法的视觉表现: 在这个特定实例中,搜索请求可能是来自另一个python类的yield。此搜索请求调用一个特定函数,如下所示 def parse_request(self, response): se

有没有一种方法可以
向python生成器发出请求,让该生成器发出多个函数来收集特定dict的数据,然后将该信息返回到原始请求?最好是通过以下方式完成大部分工作

如果这是一个愚蠢的问题,请原谅,我使用Python的经验有点有限,异步编程让我有点困惑

这是一个与我试图实现的目标非常相似的想法的视觉表现:

在这个特定实例中,搜索请求可能是来自另一个python类的
yield
。此搜索请求调用一个特定函数,如下所示

def parse_request(self, response):
        searchparam = response.meta['apn']
        metaObject = {
            "search" : searchparam,
        }
        yield Request(self.urlOne.format(searchparam), self.searchFunctionOne, headers=self.headers, meta=metaObject)
        yield Request(self.urlTwo.format(searchparam), self.searchFunctionTwo, headers=self.headers, meta=metaObject)
        yield Request(self.urlThree.format(searchparam), self.searchFunctionThree, headers=self.headers, meta=metaObject)
每个
Request
s都会出去获取不同的信息,所有这些信息都与所请求的搜索有关。每个
searchFunction
都会在dict中填入更多的信息

我的主要问题是,如何将dict发送回请求信息的原始函数,而不在
yield Request
语句之后
返回它

我考虑过的解决方案(还没有尝试过,完全是因为缺乏编写能够正常运行的代码的知识)是:

  • 使用类似
  • 我是看了电影才到的
  • 不再使用带有asyncio的普通python,而是使用scrapy和scraping页面
  • 请求某种侦听器而不是搜索函数(可能是回调函数而不是侦听器),该函数监视等待构建的dict,检查是否完成,然后在完成时返回它(满足某些条件,例如所有必需的键都存在)
scrapy文档中没有足够的信息让我推断出一个解决方案,我也不确定当twisted本身就是异步的时候,如何使scrapy收益率异步

基本上,我想要完成的是:

def parse_request(self, response):
        searchparam = response.meta['apn']
        metaObject = {
            "search" : searchparam,
        }
        finalObject = {}
        finalObject['keyOne'] = await yield Request(self.urlOne.format(searchparam), self.searchFunctionOne, headers=self.headers, meta=metaObject)
        finalObject['keyTwo'] = await yield Request(self.urlTwo.format(searchparam), self.searchFunctionTwo, headers=self.headers, meta=metaObject)
        finalObject['keyThree'] = await yield Request(self.urlThree.format(searchparam), self.searchFunctionThree, headers=self.headers, meta=metaObject)
        
        return finalObject

提前感谢您提供的任何帮助和知识。

还有。要么这样(或类似的替代方案),要么重写逻辑以将以下请求的数据保留在
cb_kwargs
meta
中,从每个回调中生成以下请求,然后在没有更多请求时生成最终结果。啊,是的,我也在查看内联请求。我不知道这是否与我遇到的问题有关,但我想根据你的评论,答案是我可以把它变成一个解决方案。关于第二个建议,我如何将最终请求返回给请求代码的人,比如
return
?如果有一个函数通过一个
yield
调用
parse_request
,我如何将收集的数据返回给该函数?感谢您的帮助。“我如何才能将最终请求返回给请求代码”。您没有。您在处理最后一个响应的回调上运行该代码。开始使用Scrapy时,您很难掉以轻心;我们可能应该在文档中更好地讨论这一点,因为这是一个常见的问题。有。有(或类似替代方案),或者重写逻辑以将以下请求的数据保留在
cb_kwargs
meta
中,从每个回调中生成以下请求,然后在没有更多请求时生成最终结果。啊,是的,我也在查看内联请求。我不知道这是否与我遇到的问题有关,但我假设根据您的评论,答案是我可以将其转化为一个解决方案。关于第二个建议,我如何将最终请求返回到请求代码,如
return
?如果有一个函数通过
yield
调用
parse_request
,我如何将收集到的数据返回到该函数函数?感谢您的帮助。“我如何才能将最终请求返回给请求的代码”。您没有。您在处理最后一个响应的回调上运行该代码。开始使用Scrapy时,您很难掉以轻心;我们可能应该在文档中更好地介绍这一点,因为这是一个常见的问题。