加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

等待请求完成 – Python Scrapy

发布时间:2020-12-20 13:14:15 所属栏目:Python 来源:网络整理
导读:我有一个Scrapy Spider,它会抓取一个网站,该网站需要刷新令牌才能访问它们. def get_ad(self,response): temp_dict = AppextItem() try: Selector(response).xpath('//div[@class="messagebox"]').extract()[0] print("Captcha found when scraping ID "+ re
我有一个Scrapy Spider,它会抓取一个网站,该网站需要刷新令牌才能访问它们.

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

找到Captcha时调用get_p_token,但问题是,其他请求继续执行.

我希望如果找到Captcha,在get_p_token执行完成之前不要发出下一个请求.

我有优先级= 1,但这没有帮助.

HERE is full code of Spider

P.S:

实际上,令牌被传递到每个URL,这就是为什么我要等到找到新的令牌然后刮掉其余的URL.

解决方法

这是我将如何继续:

def get_p_token(self,response):
    # generate token
    ...
    yield Request(url = response.url,callback=self.no_captcha,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_,meta = response.meta)

    except Exception:
        print("Captcha was not found")
        yield Request(url = url_,meta = response.meta)

你还没有提供工作代码,所以这只是问题的证明…这里的逻辑非常简单:

如果找到验证码,则转到get_p_token,并在生成令牌后,它会请求您之前请求的URL.如果没有找到验证码,它会正常进行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读