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>
当我点击任何链接时,我会转到播放器的页面,如下所示:
<player name>
<player team>
<player age>
<player salary>
<player date>
我想废弃年龄在20到25岁之间的所有球员.
使用第一个蜘蛛刮取主页面.
使用第一个蜘蛛获取链接.
使用第二个蜘蛛抓取每个链接.
使用第二个蜘蛛获取玩家信息.
使用管道将此信息保存在json文件中.
我怎样才能将date值返回second spider到first 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
首先,我要感谢@ warwaruk、@ Robin在这个问题上为我提供的帮助。
最感谢我伟大的老师@pault
我找到了解决方案,这是算法:
在每个玩家的回调中:
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
它工作完美:)