2017-01-08 14 views
0

私はScrapyにかなり慣れています(実際にはこれを初めて使用しています)。私はテレビ番組の完全なキャストを持っているページを解析しており、俳優の個人ページにしか存在しない各俳優についていくつかの情報を収集しようとしています。ここで Scarsのメイン解析機能とは別の解析機能を呼び出す方法は?

は私のparse関数の抜粋です:PICパラメータについては

for actor in response.css('tr.even'): 
    . 
    . 
    . 
    . 
    yield { 
       'real_name': 
       ' '.join(actor.css('td.itemprop a span.itemprop::text').extract_first().split()), 

       'character_name': 
       ' '.join(actor.css('td.character a::text').extract_first().split()), 

       'imdb_link': link, 

       'show': show, 

       'pic': scrapy.Request(url=link, callback=self.parse_pic) 
    } 

、私は俳優の絵へのリンクを取り戻すために、リンクに格納されたURLを開き、response.css('td div.image a img::attr(src)').extract_first()を実行したい

ここ

は私のparse_pic機能である:

def parse_pic(self, response): 
    return response.css('td div.image a img::attr(src)').extract_first() 

ありがとうございました!

答えて

0

これでリクエストは作成されましたが、実行していません。収集したデータを新しいリクエストのメタデータに保存することをお勧めします。

要求1:、PICのための新しい要求を作成したメタデータ内の第一のURLからすべてのデータを格納し、PICのURLを持つ新しいリクエストを送信

要求2:(メタから)データを収集し、要求から1とし、このデータをピクチャデータで補完する。

for actor in response.css('tr.even'): 
    . 
    . 
    . 
    . 
    request = scrapy.Request(url=link, callback=self.parse_pic) 
    request.meta['data'] = { 
       'real_name': 
       ' '.join(actor.css('td.itemprop a span.itemprop::text').extract_first().split()), 

       'character_name': 
       ' '.join(actor.css('td.character a::text').extract_first().split()), 

       'imdb_link': link, 

       'show': show, 
    } 
    yield request 

そして、このparse_picとして:

def parse_pic(self, response): 
    data = response.meta.get('data') 
    data['pic'] = response.css('td div.image a img::attr(src)').extract_first() 
    yield data 
関連する問題