Может быть проще начать с многомерного списка, а затем перенести его в DataFrame, чтобы мы не предполагали размеры.Гиперссылка «Данные» ссылается на div id = 0, поэтому мы выбираем все элементы в нем, а затем анализируем каждый столбец в каждой строке в массив списка (в котором я называю elements ), который добавляется к массиву полного списка (который я называю fullelements ) и сбрасывается для каждой новой строки.
from bs4 import BeautifulSoup
import pandas as pd
import requests
url = 'https://docs.google.com/spreadsheets/d/1dgOdlUEq6_V55OHZCxz5BG_0uoghJTeA6f83br5peNs/pub?range=A1:D70&gid=1&output=html#'
r = requests.get(url)
html_doc = r.text
soup = BeautifulSoup(html_doc, features='html.parser')
#print(soup.prettify())
print(soup.title.text)
datadiv=soup.find("div", {"id": "0"})
elementsfull =[]
row=0
for tr in datadiv.findAll("tr"):
elements=[]
column=0
for td in tr.findAll("td"):
if(td.text!=''):
elements.append(td.text)
column+=1
#print('column: ', column)
elementsfull.append(elements)
#print('row: ', row)
row+=1
mydf = pd.DataFrame(data=elementsfull)
print(mydf)
Я проверил этот код и проверил его по таблице, поэтому ягарантировать, что это работает.