#html #python-3.x #beautifulsoup
Вопрос:
У меня есть очень простой вопрос, и я не смог найти на него ответ. Предположим, у меня есть HTML-таблица следующего вида:
html1 = """
<table>
<tbody><tr>
<th>Id</th>
<th>Month</th>
</tr>
<tr><td>1</td><td>January</td></tr>
<tr><td>2</td><td>February</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td><td>October</td></tr>
<tr><td>6</td><td>December</td></tr>
<tr><td>7</td></tr>
<tr><td>Correct</td></tr>
</tbody></table>
"""
Я хочу удалить tr
теги, первый td
тег которых не является цифрой, и сохранить остальную часть таблицы нетронутой. Я не уверен, имеет ли это смысл, но ниже приведен желаемый результат:
<table>
<tbody><tr>
<th>Id</th>
<th>Month</th>
</tr>
<tr><td>1</td><td>January</td></tr>
<tr><td>2</td><td>February</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td><td>October</td></tr>
<tr><td>6</td><td>December</td></tr>
<tr><td>7</td></tr>
</tbody></table>
Ответ №1:
Чтобы удалить всех <tr>
, у кого первая <td>
цифра не является цифрой, убедитесь, что <td>
это не .isdigit()
так, а затем .extract()
это:
from bs4 import BeautifulSoup
html1 = """
<table>
<tbody>
<tr>
<th>Id</th>
<th>Month</th>
</tr>
<tr>
<td>1</td>
<td>January</td>
</tr>
<tr>
<td>2</td>
<td>February</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>October</td>
</tr>
<tr>
<td>6</td>
<td>December</td>
</tr>
<tr>
<td>7</td>
</tr>
<tr>
<td>Correct</td>
</tr>
</tbody>
</table>
"""
soup = BeautifulSoup(html1, "html.parser")
[tag.extract() for tag in soup.find_all("tr") if not tag.find_next("td").text.isdigit()]
print(soup.prettify())