Я пытаюсь убрать скобки плей-офф НХЛ из Википедии в течение 1988 года, используя прекрасный суп 4 в питоне.Непоследовательное форматирование (иногда есть несколько команд подряд, см .: (https://en.wikipedia.org/wiki/2004_Stanley_Cup_playoffs) усложняет задачу. Я бы хотел определить количество выигранных команд, раундов и количество игр для каждой серии в этом году.
Изначально я преобразовал таблицу в текст и использовал регулярные выражения для определения команд и информации, но порядок меняется в зависимости от того, позволяют ли скобки более одной команды в строке или нет.
Теперь я пытаюсь пройтись по строкам и посчитать такие вещи, как количество ячеек / столбцов, но результаты противоречивы. Мне не хватает того, как определяются команды 4-го раунда.
Что ядо сих пор есть попытка подсчитать количество ячеек до того, как будет достигнута ячейка с командой ...
from bs4 import BeautifulSoup as soup
hockeyteams = ['Anaheim','Arizona','Atlanta','Boston','Buffalo','Calgary','Carolina','Chicago','Colorado','Columbus','Dallas','Detroit',
'Edmonton','Florida','Hartford','Los Angeles','Minnesota','Montreal','Nashville','New Jersey',
'Ottawa','Philadelphia','Pittsburgh','Quebec','San Jose','St. Louis','Tampa Bay','Toronto','Vancouver','Vegas','Washington',
'Winnipeg','NY Rangers','NY Islanders']
#fetch the content from the url from the library
page_response = requests.get(full_link, timeout=5)
#use the html parser to parse the url
page_content = soup(page_response.content, "html.parser")
tables = page_content.find_all('table')
cnt = 0
#identify the appropriate table
for table in tables:
if ('Semi' in table.text) & ('Stanley Cup Finals' in table.text):
bracket = table
break
row_num = 0
for row in bracket.find_all('tr'):
row_num += 1
print(row_num,'#')
colcnt = 0
for col in row.find_all('td'):
if "colspan" in col.attrs:
colcnt += int(col.attrs['colspan'])
else:
colcnt += 1
if (col.text.strip(' \n') in str(hockeyteams)):
print(colcnt,col.text)
print('col width:',colcnt)
В конечном итоге я хотел бы что-то вроде кадра данных, который имеет:
Команда раунда Команда А побеждает, Команда Б Команда Б выигрывает
1, Тампа Бэй, 4, Нью-Йорк Айлендерс, 1
2, Тампа Бэй, 4, Монреаль, 0
и т. Д.