如何在解析期间设置 github 令牌的自动更改?

Posted

技术标签:

【中文标题】如何在解析期间设置 github 令牌的自动更改?【英文标题】:How do I set up automatic change of the github token during parsing? 【发布时间】:2022-01-18 22:20:57 【问题描述】:

如果我有多个帐户/令牌,GitHub 允许您每小时发送不超过 2500 个请求,当达到特定级别的请求(例如 2500)或令牌时,如何在 Scrapy 中设置自动令牌更改响应 403 时更改。?

class GithubSpider(scrapy.Spider):
    name = 'github.com'
    start_urls = ['https://github.com']
    tokens = ['token1', 'token2',  'token3', 'token4']
    headers = 
        'Accept': 'application/vnd.github.v3+json',
        'Authorization': 'token ' + tokens[1],
    
    
    def start_requests(self, **cb_kwargs):
        for lang in languages:
            cb_kwargs['lang'] = lang
            url = f'https://api.github.com/search/users?q=language:lang%20location:country&per_page=100'
            yield Request(url=url, headers=self.headers,  callback=self.parse, cb_kwargs=cb_kwargs)

【问题讨论】:

【参考方案1】:

您可以使用模块 itertools 中的 cycle 函数来使用您的令牌列表创建一个生成器,然后您可以为您发送的每个请求循环遍历,以确保您平等地使用所有令牌,从而减少达到任何令牌的限制。

如果您开始收到403 响应,那么您将知道所有令牌都已达到其限制。请参阅下面的示例代码

from itertools import cycle

class GithubSpider(scrapy.Spider):
    name = 'github.com'
    start_urls = ['https://github.com']
    tokens = cycle(['token1', 'token2',  'token3', 'token4'])

    def start_requests(self, **cb_kwargs):
        for lang in languages:
            headers = 
                'Accept': 'application/vnd.github.v3+json',
                'Authorization': 'token ' + next(self.tokens)
            
            cb_kwargs['lang'] = lang
            url = f'https://api.github.com/search/users?q=language:lang%20location:country&per_page=100'
            yield Request(url=url, headers=headers,  callback=self.parse, cb_kwargs=cb_kwargs)

【讨论】:

以上是关于如何在解析期间设置 github 令牌的自动更改?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0 服务器如何知道在客户端身份验证期间应该使用哪个密钥来解析 jwt 令牌? (client_secret_jwt)

如何在 Rails 中解析 CSV 期间更改编码

在视图期间更改后重新排列自动布局

如何通过命令行更新 GitHub 访问令牌

npm run build-storybook 失败并显示“模块解析失败:意外令牌 (20:25)”

如何在将 .net 核心项目发布到 azure 期间更改应用程序设置部分的值