2016-10-03 116 views
3

我有一个Scrapy蜘蛛它擦伤一个网站,该网站需要刷新令牌能够访问它们。等待请求完成 - 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当发现验证码是所谓的,但问题是,其他请求继续执行。

我想是直到get_p_token执行完毕,如果验证码被发现,不作下一个请求。

我有priority=1但于事无补。

HERE is full code of Spider

P.S:

实际上该令牌被传递到每个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