2016-10-03 3 views
3

У меня есть Scrapy Spider, который скрежет веб-сайта, и на этом веб-сайте требуется обновить токен, чтобы иметь доступ к ним.Ждите ответа на запрос - 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") 

У меня есть get_p_token метод, который обновляет маркер и присваивает self.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_ad' внутри метода' get_p_token' ... см. полный код http://pastebin.com/X6Q4ZFp2 – Umair