Я очищаю кучу данных веб-сайта и могу печатать на терминале, но у меня серьезные проблемы с отправкой их прямо на лист.
Я могу подтвердить, что соединение с Gspread работает — мой код перебирает имена, но не касается листа.
Я думал, что последняя строка кода (добавление) поместит результаты.
В конечном счете, я просто хочу получить полный результат моего кода в столбцах на листе, но у меня проблемы.
Если есть лучший подход, хотелось бы получить любое руководство:
https://docs.google.com/spreadsheets/d/1TD4YmhfAsnSL_Fwo1lckEbnUVBQB6VyKC05ieJ7PKCw/edit#gid=0
import requests
from bs4 import BeautifulSoup
import gspread
gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('1TD4YmhfAsnSL_Fwo1lckEbnUVBQB6VyKC05ieJ7PKCw')
worksheet = sh.sheet1
# AddValue = ["Test", 25, "Test2"]
# worksheet.insert_row(AddValue, 3)
def get_links(url):
data = []
req_url = requests.get(url)
soup = BeautifulSoup(req_url.content, "html.parser")
for td in soup.find_all('td', {'data-th': 'Player'}):
a_tag = td.a
name = a_tag.text
player_url = a_tag['href']
print(f"Getting {name}")
req_player_url = requests.get(
f"https://basketball.realgm.com{player_url}")
soup_player = BeautifulSoup(req_player_url.content, "html.parser")
div_profile_box = soup_player.find("div", class_ = "profile-box")
row = {"Name": name, "URL": player_url}
for p in div_profile_box.find_all("p"):
try:
key, value = p.get_text(strip=True).split(':', 1)
row[key.strip()] = value.strip()
except: # not all entries have values
pass
data.append(row)
return data
urls = [
'https://basketball.realgm.com/dleague/players/2022',
]
for url in urls:
print(f"Getting: {url}")
data = get_links(url)
for entry in data:
worksheet.append_row(entry)
data
из data = get_links(url)
— это массив, включающий объект JSON. На текущем этапе append_row
не может напрямую использовать объект JSON. Я думал, что это причина вашей текущей проблемы.append_row
используется в цикле. В этом случае стоимость процесса будет высокой.Когда эти моменты отразятся в вашем сценарии, как насчет следующей модификации?
for url in urls:
print(f"Getting: {url}")
data = get_links(url)
for entry in data:
worksheet.append_row(entry)
res = []
for url in urls:
print(f"Getting: {url}")
data = get_links(url)
res = [*res, *data]
if res != []:
header = list(res[0].keys())
values = [header, *[[e[k] if e.get(k) else "" for k in header] for e in res]]
worksheet.append_rows(values, value_input_option = "USER_ENTERED")
append_rows
.header = list(res[0].keys())
. Если вы хотите использовать ожидаемые упорядоченные заголовки, поместите их вручную в header = list(res[0].keys())
.@Энтони Мэдл Спасибо за ответ. Я рад, что ваша проблема была решена. И тебе спасибо.
удивительное решение. Я вижу, это очень полезно в моем обучении. За последние 6 месяцев я научился безумно многому, и это благодаря таким людям, как вы. Спасибо!