scrapy如何将蜘蛛返回给另一只蜘蛛的价值

Mar*_*oli 5 python scrapy python-2.7

我正在抓取的网站包含许多玩家,当我点击任何玩家时,我可以进入他的页面.

网站结构如下:

<main page>
<link to player 1>
<link to player 2>
<link to player 3>
..
..
..
<link to payer n>
</main page>
Run Code Online (Sandbox Code Playgroud)

当我点击任何链接时,我会转到播放器的页面,如下所示:

<player name>
<player team>
<player age>
<player salary>
<player date>
Run Code Online (Sandbox Code Playgroud)

我想废弃年龄在20到25岁之间的所有球员.

我在做什么

  1. 使用第一个蜘蛛刮取主页面.

  2. 使用第一个蜘蛛获取链接.

  3. 使用第二个蜘蛛抓取每个链接.

  4. 使用第二个蜘蛛获取玩家信息.

  5. 使用管道将此信息保存在json文件.

我的问题

我怎样才能将date值返回second spiderfirst spider

我试过的

我建立自己的middelware,我覆盖了process_spider_output.它允许我打印请求但我不知道我还应该做什么才能将该date值返回给我的第一个蜘蛛

任何帮助表示赞赏

编辑

以下是一些代码:

def parse(self, response):
        sel = Selector(response)
        Container = sel.css('div[MyDiv]')
        for player in Container:
            extract LINK and TITLE
            yield Request(LINK, meta={'Title': Title}, callback = self.parsePlayer)

def parsePlayer(self,response):
    player = new PlayerItem();
    extract DATE
    return player
Run Code Online (Sandbox Code Playgroud)

我给了你一般代码,而不是非常具体的细节,以便让你轻松

Mar*_*oli 2

首先,我要感谢@ warwaruk、@ Robin在这个问题上为我提供的帮助。

最感谢我伟大的老师@pault

我找到了解决方案,这是算法:

  1. 开始在主页上抓取。
  2. 提取所有玩家的链接。
  3. 回调每个玩家的链接以提取他的信息。请求的meta包括:当前主页的玩家数量以及我要废弃的玩家的位置。
  4. 在每个玩家的回调中:

    4.1 提取玩家信息。

    4.2 检查日期是否在愤怒中,如果否:不执行任何操作,如果是:检查这是否是主玩家列表中的最后一个播放。如果是,则回调到第二主页面。

简单的代码

def parse(self, response):
    currentPlayer = 0
    for each player in Players:
        currentPlayer +=1
        yield Request(player.link, meta={'currentPlayer':currentPlayer, 'numberOfPlayers':len(Players),callback = self.parsePlayer)

def parsePlayer(self,response):
    currentPlayer = meta['currentPlayer]
    numberOfPlayers = meta['numberOfPlayers']
    extract player's information
    if player[date] in range:
        if currentPlayer == numberOfPlayers:
            yield(linkToNextMainPage, callback = self.parse)
            yield playerInformatoin #in order to be written in JSON file
        else:
            yield playerInformaton
Run Code Online (Sandbox Code Playgroud)

它工作完美:)