- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Python 的新手,目前正在处理一项自由职业任务。在我的项目中,我获得了主题名称 xls 文件,该文件每周都会更新为新名称。我能够抓取给定名称的数据,并通过 python 将获得的数据插入到 google 工作表中。目前,我的文件中有 5,000 多个名字。我以为我的代码已准备就绪,但在输入 8-10 个名称后,我遇到了错误 429,表明超出了配额限制。我查看了该网站,似乎 Google 允许每个项目每 100 秒限制 500 个请求,每个用户每 100 秒限制 100 个请求。考虑到这个限制,我对代码进行了更改并添加了 sleep ,因此不会遇到此错误,但根据我的想法,我似乎误会了这里,我的代码在循环运行中执行了 7 个请求,而我之前运行了 9 个循环执行 sleep(500) 但我仍然面临同样的错误。我确信我遗漏了一些非常明显的东西,但在我自己尝试了 3 天之后,我失去了信心,因此感谢任何帮助,下面是供引用的代码。
import requests
from bs4 import BeautifulSoup
import gspread
import pandas as pd
from oauth2client.service_account import ServiceAccountCredentials
from pandas import ExcelWriter
import time
# define the scope
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
# add credentials to the account
creds = ServiceAccountCredentials.from_json_keyfile_name('/content/drive/MyDrive/ListUpdate.json', scope)
# authorize the clientsheet
client = gspread.authorize(creds)
# get the instance of the Spreadsheet
sheet = client.open('JP_combined_Strip')
# get the first sheet of the Spreadsheet
sheet_instance = sheet.get_worksheet(0)
list_of_lists = sheet_instance.get_all_values() # req 1
print(len(list_of_lists))
start = int((sheet_instance.cell(2, 1).value)) # req 2 this column is for recording the last row number where this program left off to continue from there next on next run
end = len(list_of_lists) + 1
for i in range(start,end,1):
##
## code for scraping
##
##
##
## scraped data
##
sheet_instance.update_cell(i, 3, data_1 ) # req 3
sheet_instance.update_cell(i, 4,data_2) # req 4
sheet_instance.update_cell(i, 5, data_3) # req 5
sheet_instance.update_cell(i, 6, data_4) # req 6
sheet_instance.update_cell(i, 7, data_5) # req 7
sheet_instance.update_cell(i, 8, data_6) # req 8
sheet_instance.update_cell(i, 9, data_7) # req 9 (req 7 under loop)
if i%9 == 0:
sheet_instance.update_cell(2, 1, i) # req 8 under loop when loop is run9 times = 9 * 7 = 63 requests total
## total requests should be 66 in total before each sleep statement is executed which is less than 100 requests as stated in google
print("sleep")
time.sleep(500)
代码成功运行到第一次休眠,7 条记录都得到执行但下一批失败并出现此错误。
最佳答案
问题是您仅在一定数量的请求后才休眠,而忽略了它可能在其间的任何地方失败,因此任何 API 调用都是潜在的失败。
这个问题有很多解决方案。在我看来,最好的方法是将每个调用包装到一个带有 try-catch block 和休眠功能的函数中。
import time
def api_call_handler(func):
# Number of retries
for i in range(0, 10):
try:
return func()
except Exception as e:
print(e)
time.sleep(2 ** i)
print("The program couldn't connect to the Google Spreadsheet API for 10 times. Give up and check it manually.")
raise SystemError
此代码的用法示例:
# Before
sheet_instance.update_cell(i, 3, data_1)
# Now
api_call_handler(lambda: sheet_instance.update_cell(i, 3, data_1))
此解决方案为代码添加了额外的结构并使其冗长,但它是防弹的。
关于python - 通过 python 插入数据时如何处理 google 工作表中的配额超出错误 429?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67278848/
在文档中我们可以找到 The limits are based on a moving window that tracks the number of requests you send per h
我试图了解使用 Windows Azure 托管 Web 服务的正确方法。在阅读了一些可用的文档后,我已经达到以下几行: Windows Azure takes the following actio
我正在使用 unboundid ldap sdk 来执行 ldap 查询。运行 ldap 搜索查询时遇到一个奇怪的问题。当我对包含 50k 个条目的组运行查询时出现异常。我的异常(exception)
我有以下 docker-compose 文件: version: "2.4" services: auto_check: image: python mem_limit: 97M
我有副本集(托管在亚马逊上),其中有: 主要 中学 仲裁者 它们都是 3.2.6 版本,这个副本正在我的分片集群中创建一个分片(如果这很重要,尽管我认为它不重要)。 当我在 primary 上键入 r
我知道在 C++ 中访问缓冲区边界是未定义的行为。 这是来自 cppreference 的示例: int table[4] = {}; bool exists_in_table(int v) {
嗨,我有一个表单的 div。我希望当鼠标离开 div 时禁用单击事件。所以我尝试了这个,但它不起作用,div 仍然可以点击。有什么想法吗?? var flag = false; $("#foo").l
我正在使用我的客户端获取有关存储在我的 Swift 对象存储中的某个文件的一些信息,该文件可以通过 REST Api 访问。在 Swift 中,指向指定对象的 HEAD 方法和 url 返回它的元数据
如何在 Excel 的 CONCATENATE 函数中使用超过 255 个字符?我实际上也在 EXCEL 的 HYPERLINK 函数中使用 CONCATENATE 函数。一个例子如下: =HYPER
在 java 6 web 应用程序中,我尝试从执行的命令中检索大量输出。我在 javaworld article 上“借用/窃取/基于”它。我面临的问题是,由于输出被截断,长度似乎超出了大小限制。我已
我有一个更改事件,当选择框更改时会触发该事件。然而,选择框位于被替换的 div 内,因此会重新生成选择框。由于此错误可能是由于无限循环造成的,因此我猜测创建选择框时也必须触发我的触发事件。我尝试了很多
我正在 visual studio 2013 中用 c# 创建一个网络服务。我已连接到数据库并使用以下代码返回 json。 [WebMethod] [ScriptMethod(ResponseForm
我使用 php 脚本解析远程 xml 文件并将网页上的输出打印到 div 中。由于我需要输出必须与当前播放的轨道同步,所以我使用 Javascript 每 20 秒重新加载一次 div 内容。在测试页
#define MAX_BUFF_SIZE 64 char input[MAX_BUFF_SIZE]; int inSize = read(0, input, MAX_BUFF_SIZE); if
我在申请公司时遇到了问题。 我将总结系统的关键要素: 我公司的系统几年前就在 Windows XP 和 7(家庭版、专业版、基本版)机器上运行。 它是用 .NET 4.0 编写的,基于 WCF。 它使
我有一个渲染循环,用于监听数位板输入并从顶点/索引缓冲区(以及其他内容)中绘制。顶点数据可以增长,当它达到一定水平时,DispatchMsg(&msg) 会遇到这种情况: Unhandled exce
我通过 Postgres JDBC 驱动程序使用 Java 1.7 和 Postgres。将从 Web 服务使用数据库连接。在测试中,我得到了以下错误: FATAL: connection limit
我想知道当超过 Firebase 实时数据库的限制时会发生什么。问题是我知道我可以拥有的最大连接数仅为 100。现在,假设我的 Android 应用程序有 1,000 个活跃用户,并且我实现了实时数据
我正在将一组图像上传到我的 node.js Express 服务器,但收到错误 - “错误:超出 maxFieldsSize”。看起来默认的 maxFieldsSize 是 2MB。我需要能够上传最多
我正在使用 Django 构建一个小型 Web 项目,该项目有一个包含 ImageField 的模型 (Image)。当我尝试使用管理界面上传图片时,我遇到了这个问题(删除了个人身份信息): Runt
我是一名优秀的程序员,十分优秀!