【问题标题】:How do I set up automatic change of the github token during parsing?如何在解析期间设置 github 令牌的自动更改?
【发布时间】: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)

【问题讨论】:

    标签: web-scraping scrapy github-api


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 2011-02-27
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2018-10-07
      相关资源
      最近更新 更多