Я посмотрел на HTML-код, который вы пытаетесь очистить, и проблема в том, что все теги, которые вы пытаетесь получить, находятся в разделе комментариев, <!-- Like this --->
.BeautifulSoup обрабатывает комментарии внутри как просто набор текста, а не фактический HTML-код.Итак, что вам нужно сделать, это взять содержимое комментария, а затем вставить эту строку обратно в BeautifulSoup:
import requests
from bs4 import BeautifulSoup, Comment
url = 'https://www.basketball-reference.com/boxscores/201101100CHA.html'
html = requests.get(url).content
soup = BeautifulSoup(html,"html.parser")
div = soup.find('div', id='all_four_factors')
# Get everything in here that's a comment
comments = div.find_all(text=lambda text:isinstance(text, Comment))
# Loop through each comment until you find the one that
# has the stuff you want.
for c in comments:
# A perhaps crude but effective way of stopping at a comment
# with HTML inside: see if the first character inside is '<'.
if c.strip()[0] == '<':
newsoup = BeautifulSoup(c.strip(), 'html.parser')
tr = newsoup.find_all('tr')
print(tr)
Одно предостережение с этим заключается в том, что BS будет предполагать, что закомментированный кодправильный, правильно сформированный HTML.Это работает для меня, хотя, если страница остается относительно той же, она должна продолжать работать.