如何在解析期间设置 github 标记的自动更改?
How do I set up automatic change of the github token during parsing?
GitHub如果我有几个accounts/tokens,允许你每小时发送不超过2500个请求,当达到一定级别的请求时,如何在Scrapy中设置自动令牌更改(例如 2500) 或在响应 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)
您可以使用模块 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如果我有几个accounts/tokens,允许你每小时发送不超过2500个请求,当达到一定级别的请求时,如何在Scrapy中设置自动令牌更改(例如 2500) 或在响应 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)
您可以使用模块 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)