【问题标题】:How to get new token headers during runtime of scrapy spider如何在scrapy spider运行时获取新的token headers
【发布时间】:2020-08-03 18:51:15
【问题描述】:

我正在运行一个爬虫爬虫,它首先使用基本请求库从我正在爬取的网站获取授权令牌。用于此的函数称为 get_security_token()。此令牌作为标头传递给 scrapy 请求。问题是令牌在 300 秒后过期,然后我收到 401 错误。蜘蛛是否无论如何都会看到 401 错误,再次运行 get_security_token() 函数,然后将新令牌传递给所有未来的请求标头?

import scrapy

class PlayerSpider(scrapy.Spider):
name = 'player'

def start_requests(self):

    urls = ['URL GOES HERE']
    header_data = {'Authorization':'Bearer 72bb65d7-2ff1-3686-837c-61613454928d'}
    for url in urls:
        yield scrapy.Request(url = url, callback = self.parse,headers = header_data)


def parse(self, response):
    yield response.json()

【问题讨论】:

    标签: web-scraping scrapy scrapy-middleware


    【解决方案1】:

    如果是纯scrapy,您可以在start_urls 之后添加handle_httpstatus_list = [501] 然后在你的parse 方法中你需要做这样的事情:

    if response.status == 501:
        get_security_token()
    

    【讨论】:

    • 如何将新的安全令牌传递给所有未来的请求,以及引发错误的请求?
    • 一旦获得令牌get_security_token(),您就可以将这些标头传递给请求yield scrapy.Request(url=your_url, headers=headers_with_new_token, callback=self.your_callback)
    • 谢谢,这是有道理的。我唯一的问题是 - headers_with_new_token 将在 parse 方法内的 scrapy.Request 调用中发送,但我如何确保之后的所有请求也使用 headers_with_new_token
    • 您可以查看response.headers 获取更新令牌的请求
    • 我添加了一些代码来说明我在哪里。问题是 'Authorization':'Bearer xxx' 密钥过期。也许用我的代码你可以更好地描述我应该把那个变量放在哪里以便我可以在运行时改变它?
    猜你喜欢
    • 1970-01-01
    • 2015-07-09
    • 2018-12-20
    • 1970-01-01
    • 2020-09-26
    • 2014-10-06
    • 2016-03-17
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多