2016-10-03 13 views
3

私はウェブサイトを傷つけるScrapy Spiderを持っており、そのWebサイトにアクセスするにはトークンをリフレッシュする必要があります。リクエストが完了するまで待つ - Python Scrapy

def get_ad(self, response): 
    temp_dict = AppextItem() 
    try: 
     Selector(response).xpath('//div[@class="messagebox"]').extract()[0] 
     print("Captcha found when scraping ID "+ response.meta['id'] + " LINK: "+response.meta['link']) 
     self.p_token = '' 

     return Request(url = url_, callback=self.get_p_token, method = "GET",priority=1, meta = response.meta) 

    except Exception: 
     print("Captcha was not found") 

他の要求の実行に保つ、キャプチャが発見されたとき、私はトークン更新され、self.p_token

get_p_tokenに割り当てるget_p_token法と呼ばれてきたが、問題があります。

Captchaが見つかった場合は、get_p_tokenの実行が終了するまで次のリクエストをしないでください。

私はpriority=1ですが、それは役に立ちません。

HERE is full code of Spider

P.S:私は新しいトークンが発見されるまで待ってから、URLの残りの部分をこすりしたい理由があるよう

が実際にそのトークンが各URLに渡されます。

答えて

0

これは私がそれについて上に行くだろうかです:

def get_p_token(self, response): 
    # generate token 
    ... 
    yield Request(url = response.url, callback=self.no_captcha, method = "GET",priority=1, meta = response.meta, dont_filter=True) 


def get_ad(self, response): 
    temp_dict = AppextItem() 
    try: 
     Selector(response).xpath('//div[@class="messagebox"]').extract()[0] 
     print("Captcha found when scraping ID "+ response.meta['id'] + " LINK: "+response.meta['link']) 
     self.p_token = '' 

     yield Request(url = url_, callback=self.get_p_token, method = "GET",priority=1, meta = response.meta) 

    except Exception: 
     print("Captcha was not found") 
     yield Request(url = url_, callback=self.no_captcha, method = "GET",priority=1, meta = response.meta) 

あなたが動作するコードを提供していないので、これは問題の唯一の証明である...ここロジックは非常に単純です:

キャプチャが見つかった場合はget_p_tokenになり、トークンを生成した後、要求していたURLが要求されます。キャプチャが見つからない場合は通常どおりに進みます。

+0

これは私がすでにやっていることです。私は 'get_p_token'メソッド内で同じ' get_ad'メソッドを呼び出しています...フルコードhttp://pastebin.com/X6Q4ZFp2を参照してください – Umair

関連する問題