python - 如何处理超出gspread配额的错误429

标签 python web-scraping google-sheets error-handling gspread

我正在尝试将内容写到一张纸上,但我正在
gspread.exceptions.APIError: {'code': 429, 'message': "Quota exceeded for quota group 'WriteGroup' and limit 'Write requests per user per 100 seconds'....
如何编辑我的代码,使其不达到配额限制,或者在达到配额后继续执行?尝试了time.sleep(),但没有成功,或者我无法将其放在正确的位置。

这是我的gspread代码

class CpfSearch(object):
    def __init__(self, spreadsheet_name):
        self.cpf_col = 1
        self.nome_col = 2
        self.age_col = 3
        self.beneficio_col = 4
        self.concessao_col = 5
        self.salario_col = 6
        self.bancos_col = 7
        self.bancocard_col = 8
        self.consig_col = 9
        self.card_col = 15

        scope = ['https://www.googleapis.com/auth/spreadsheets',
                 'https://www.googleapis.com/auth/drive.readonly']

        creds = ServiceAccountCredentials.from_json_keyfile_name('CONSULTAS.json', scope)

        client = gspread.authorize(creds)

        self.sheet = client.open(spreadsheet_name).sheet1

    def process_cpf_list(self):

        # SKIP OVER COLUMN HEADING IN THE SPREADSHEET
        cpfs = self.sheet.col_values(self.cpf_col)[1:]

        bot_url = BOT(cpfs)
        nomes, idades, beneficios, concessoes, salarios, bancoss, bancoscard, consigs, cards = bot_url.search_cpfs()

        # UPDATE THE SHEET
        print("Atualizando...")

        for cpfs in range(len(nomes)):
            time.sleep(1)
            self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
            self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
            self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
            self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
            self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
            self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
            self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
            self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
            self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])


cpf_updater = CpfSearch('TESTE')
cpf_updater.process_cpf_list()

最佳答案

在这个答案中,我想建议创建一个包含值的数组,并使用values_update方法将该数组放入Spreadsheet。可以通过一个API调用来放置值。由此,我认为您的问题可能会得到解决。
修改后的脚本:
修改脚本后,请进行以下修改。
从:

self.sheet = client.open(spreadsheet_name).sheet1
至:
self.spreadsheet = client.open(spreadsheet_name)
self.sheet = self.spreadsheet.sheet1

从:
for cpfs in range(len(nomes)):
    time.sleep(1)
    self.sheet.update_cell(cpfs + 2, self.nome_col, nomes[cpfs])
    self.sheet.update_cell(cpfs + 2, self.age_col, idades[cpfs])
    self.sheet.update_cell(cpfs + 2, self.beneficio_col, beneficios[cpfs])
    self.sheet.update_cell(cpfs + 2, self.concessao_col, concessoes[cpfs])
    self.sheet.update_cell(cpfs + 2, self.salario_col, salarios[cpfs])
    self.sheet.update_cell(cpfs + 2, self.bancos_col, bancoss[cpfs])
    self.sheet.update_cell(cpfs + 2, self.bancocard_col, bancoscard[cpfs])
    self.sheet.update_cell(cpfs + 2, self.consig_col, consigs[cpfs])
    self.sheet.update_cell(cpfs + 2, self.card_col, cards[cpfs])
至:
values = []
for cpfs in range(len(nomes)):
    values.append([nomes[cpfs], idades[cpfs], beneficios[cpfs], concessoes[cpfs], salarios[cpfs], bancoss[cpfs], bancoscard[cpfs], consigs[cpfs], "", "", "", "", "", cards[cpfs]])
rng = "'" + self.sheet._properties['title'] + "'!B2"
self.spreadsheet.values_update(rng, params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
引用:
  • values_update(range, params=None, body=None)
  • 关于python - 如何处理超出gspread配额的错误429,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61196311/

    相关文章:

    python - 通过 Pandas 和 Numpy.ndarray 类型将 Excel 矩阵转换为 JSON

    python - 使用 Python 和 BeautifulSoup 启动网页抓取 - 分步教程中的错误

    python-3.x - 如何从 target.com 产品页面抓取产品价格?

    javascript - 如何在编辑表的单元格上方添加列

    javascript - 尝试按索引访问 Map 的数组值时出现未定义错误

    Python子类元组对象能够在内部重新实例化自身

    python - render_template 中的 Flask 参数

    python - 使用键作为列标题将 python 字典写入 CSV 文件

    python - 无法纠正 - ValueError : unknown url type: Link

    android - Google Sheets API v4 - 如何获得最后一行的值(value)?