【发布时间】:2023-06-23 22:37:02
【问题描述】:
无论我对范围进行什么更改,我都会不断收到此错误,我只是想知道是否有人可以解释我必须做些什么来解决这个问题。下面列出的是我收到错误的代码。任何帮助表示赞赏。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
import requests
from bs4 import BeautifulSoup
import bs4
import re
import time
memberList = []
res = requests.get('https://plancke.io/hypixel/guild/name/GBP')
soup = bs4.BeautifulSoup(res.text, 'lxml')
for i in soup.select('.playerInfo'):
memberList.append(i.text)
memberList = [e[37:-38] for e in memberList]
members = [re.sub("[A-Z][^A-Z]+$", "", member.split(" ")[1]) for member in memberList]
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)
client = gspread.authorize(creds)
sheet = client.open('GBP Google Sheets').sheet1
data = sheet.get_all_records()
memberCol = sheet.col_values(16)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
memberCol.pop(0)
for i in range(len(memberCol) + 2):
time.sleep(1.2)
sheet.update_cell(i + 12,16, members[i - 1])
如果有更简单的方法可以将列表输入到谷歌表格中,那也将不胜感激。提前感谢您的时间和考虑。
【问题讨论】:
-
首先,最后一个循环的范围从 0 开始,所以 i-1 将在开始时给出索引 -1,这是超出范围的。还要检查范围减 1 中的最后一个数字是否仍在成员数组的范围内。
-
我还是有点困惑,我有 i-1 来确保我得到了列表中的第一个元素,但现在我没有得到第一个元素,我仍然有一个错误。 ``` for i in range(len(memberCol) + 1): time.sleep(1.2) sheet.update_cell(i + 12,16, members[i]) ``` 我仍然不确定我到底应该做什么执行以消除错误。
-
检查 len(memberCol) + 2 是否大于成员的大小
-
基本上,如果 memberCol 的大小是 5,那么循环将从 0 到 5 + 你决定的任何数字,在你发布的情况下,5+2,所以从 0 开始到 6。如果成员数组的大小为 5,那么当它尝试访问不存在的最后一项时,您将得到一个超出范围的索引。
-
这更有意义,非常感谢!
标签: python list web-scraping google-sheets gspread