如何在解析期间设置 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)