Permítanme comenzar con la conclusión: la ortografía es incorrecta. BeatufulSoup no tiene findall(), sino findAll().
BS4 recomienda usar find_all(), este findAll es solo para compatibilidad con BS3,
Aquí está la cosa:
soup = BeautifulSoup(html, 'html.parser')
trs = soup.find(id="grid").find("tbody").findAll("tr")
for tr in trs:
tds=tr.findall("td")
BeautifulSoup ejecuta tds=tr.findall("td") e informa un error: TypeError: el objeto 'NoneType' no se puede llamar
Reemplazado con findChildren y tiene éxito:
soup = BeautifulSoup(html, 'html.parser')
trs = soup.find(id="grid").find("tbody").findAll("tr")
for tr in trs:
tds = tr.findChildren()
Fue extraño por un tiempo, pero después de la investigación, resultó que era un error tipográfico de mayúsculas y minúsculas.