Удалите определенные строки из таблицы html с помощью beautifulsoup

#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())