идентификация регулярного выражения по слову
Как с помощу регулярных выражений получить цифры с тега если идентифицировать тег можно только по слову (Матчи,Забито Голов,Пропущено голов)?
дело в том что ето в большом теге div , и здесь только по слове внутри тега можно определить откуда брать цифры , r"<tr>.*Матчи.*</tr>", r"<tr>.*Пропущено голов.*</tr>", r"<tr>.*Забито голов.*</tr>" я так пробовал но не работает, мне нужно чтобы регулярка находила тег <tr> потом какието символы потом опредиляющее слово а потом тоже какието символы и закрыващий тег </tr>
<tr>
<td>10</td>
<td>Матчи </td>
<td>10</td>
</tr>
<tr>
<td class="red">14</td>
<td>Забито голов </td>
<td class="green">16</td>
</tr>
<tr>
<td class="green">15</td>
<td>Пропущено голов </td>
<td class="red">26</td>
</tr>
вот код , я хочу с большого тега div найти определенные теги tr по ключевым словам а потом снова через регулярные выражения найти два числа , но регулярка неработает и просто выводит все числа с большого тега div.
class GameData:
def __init__(self, html_text: str):
self.__html_text = html_text.replace("\n", "")
def get_games_quantity(self):
pattern = r"<tr>.*Матчи.*</tr>"
games_quantity_html_text = "".join(re.findall(pattern=pattern, string=self.__html_text))
return re.findall(pattern=r"\d\d|\d", string=games_quantity_html_text)
def get_goals_scored(self):
pattern = r"<tr>.*Забито голов.*</tr>"
games_quantity_html_text = "".join(re.findall(pattern=pattern, string=self.__html_text))
return re.findall(pattern=r"\d\d|\d", string=games_quantity_html_text)
def get_conceded_goals(self):
pattern = r"<tr>.*Пропущено голов.*</tr>"
games_quantity_html_text = "".join(re.findall(pattern=pattern, string=self.__html_text))
return re.findall(pattern=r"\d\d|\d", string=games_quantity_html_text)
def get_all_parametrs(self):
return dict(
games=self.get_games_quantity(),
goals_scored=self.get_goals_scored(),
conceded_goals=self.get_conceded_goals()
)
Ответы (1 шт):
Я бы предложил для парсинга html таблиц использовать библиотеку Pandas:
import pandas as pd
html = '''
<table>
<tr>
<td>10</td>
<td>Матчи </td>
<td>10</td>
</tr>
<tr>
<td class="red">14</td>
<td>Забито голов </td>
<td class="green">16</td>
</tr>
<tr>
<td class="green">15</td>
<td>Пропущено голов </td>
<td class="red">26</td>
</tr>
</table>
'''
df = pd.read_html(html)[0]
Тогда в df получится такая табличка из 3-х строк и 3-х столбцов:
0 1 2
0 10 Матчи 10
1 14 Забито голов 16
2 15 Пропущено голов 26
Доставать из неё данные можно, например, так:
goals1 = df.loc[df[1] == 'Забито голов', 0].values[0]
goals2 = df.loc[df[1] == 'Забито голов', 2].values[0]
print(goals1, goals2)
Вывод:
14 16