如何在scrapy上从另一只蜘蛛中调用一只蜘蛛

如何在scrapy上从另一只蜘蛛中调用一只蜘蛛,scrapy,Scrapy,我有两个爬行器,我希望其中一个调用另一个,其中的信息已被删除,这些链接不是我可以遵循的。有没有办法从另一只蜘蛛那里召唤一只蜘蛛 为了更好地说明这个问题:“一”页面的url是/one/{item\u name},其中{item\u name}是我可以从该页面/other/获取的信息 。。。 项目1 someItem 另一个项目 ... 然后我有一个spiderOneSpider,它可以刮取/one/{item_name},还有一个OtherSpider,它刮取/other/并检索项目名称,如下所

我有两个爬行器,我希望其中一个调用另一个,其中的信息已被删除,这些链接不是我可以遵循的。有没有办法从另一只蜘蛛那里召唤一只蜘蛛

为了更好地说明这个问题:“一”页面的url是
/one/{item\u name}
,其中
{item\u name}
是我可以从该页面
/other/
获取的信息

。。。
  • 项目1
  • someItem
  • 另一个项目
  • ...
    然后我有一个spider
    OneSpider
    ,它可以刮取
    /one/{item_name}
    ,还有一个
    OtherSpider
    ,它刮取
    /other/
    并检索项目名称,如下所示:

    class OneSpider(Spider):
    name='one'
    定义初始化(自身、项目名称、*args、**kargs):
    超级(OneSpider,self)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    self.start_url=[f'/one/{item_name}']
    def解析(自我,响应):
    ...
    其他蜘蛛类(蜘蛛类):
    名称='其他'
    start_url=['/other/']
    def解析(自我,响应):
    itemNames=response.css('li.item::text').getall()
    #待办事项:
    #对于每个项目名称
    #刮取/one/{item_name}
    #和一只蜘蛛
    

    我已经检查了这两个问题:,和,以及其他几个问题,其中主要解决方案是在类内创建另一个方法并将其作为回调传递给新请求,但我认为当这些新请求具有自定义URL时,它不适用。

    Scrapy不可能从另一个spider调用spider。

    但是,您可以将2个spider中的逻辑合并到单个spider类中:

    import scrapy
    
    class OtherSpider(scrapy.Spider):
      name = 'other'
      start_urls = [ '/other/' ]
    
      def parse(self, response):
        itemNames = response.css('li.item::text').getall()
        for item_name in itemNames:
          yield scrapy.Request(
            url = f'/one/{item_name}',
            callback = self.parse_item
            )
    
      def parse_item(self, response):
          # parse method from Your OneSpider class