如果我有多個帳戶/令牌,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} location:{country}&per_page=100'
yield Request(url=url, headers=self.headers, callback=self.parse, cb_kwargs=cb_kwargs)
uj5u.com熱心網友回復:
您可以使用cycle模塊中的函式itertools使用您的令牌串列創建一個生成器,然后您可以為您發送的每個請求回圈使用這些令牌,以確保您平等地使用所有令牌,從而減少達到任何令牌限制的機會。
如果您開始收到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} location:{country}&per_page=100'
yield Request(url=url, headers=headers, callback=self.parse, cb_kwargs=cb_kwargs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382732.html
標籤:网页抓取 刮的 github-api
