Замена содержимого таблицы с помощью Beautifulsoup - PullRequest
0 голосов
/ 31 марта 2020

Я хочу разобрать документ HTML, в котором также есть табличные данные, используя красивый суп. Я делаю некоторые НЛП над ним.

Ячейки таблицы могут иметь только цифры или могут быть жирным шрифтом. Поэтому перед выполнением soup.get_text () я должен sh изменить содержимое табличных данных в соответствии со следующим условием.

Условие: если в ячейке более двух слов (мы можем рассмотреть число быть одним словом), тогда только оставьте его, иначе измените содержимое ячейки на пустую строку.

<code to change table data based on condition>

soup = BeautifulSoup(html)
text = soup.get_text()

Вот кое-что, что я попробовал.

    tables = soup.find_all('table')
    for table in tables:
        table_body = table.find('tbody')
        rows = table_body.find_all('tr')
        for row in rows:
            cols = row.find_all('td')
            for ele in cols:
                if len(ele.text.split(' ')<3):
                    ele.text = ''

Однако мы не могу установить ele.text, поэтому он выдает ошибку.

Вот простая HTML Структура с таблицей

<!DOCTYPE html>
<html>

   <head>
      <title>HTML Tables</title>
   </head>

   <body>
      <table border = "1">
         <tr>
            <td><p><span>Row 1, Column 1, This should be kept because it has more than two tokens</span></p></td>
            <td><p><span>not kept</span></p></td>
         </tr>

         <tr>
            <td><p><span>Row 2, Column 1, should be kept</span></p></td>
            <td><p><span>Row 2, Column 2, should be kept</span></p></td>
         </tr>
      </table>

   </body>
</html>

1 Ответ

0 голосов
/ 31 марта 2020

Как только вы нашли элемент, используйте ele.string.replace_with("")

На основе вашего образца html

html='''<html>

   <head>
      <title>HTML Tables</title>
   </head>

   <body>
      <table border = "1">
         <tr>
            <td><p><span>Row 1, Column 1, This should be kept because it has more than two tokens</span></p></td>
            <td><p><span>not kept</span></p></td>
         </tr>

         <tr>
            <td><p><span>Row 2, Column 1, should be kept</span></p></td>
            <td><p><span>Row 2, Column 2, should be kept</span></p></td>
         </tr>
      </table>

   </body>
</html>'''

soup=BeautifulSoup(html,'html.parser')
tables = soup.find_all('table')
for table in tables:
    rows = table.find_all('tr')
    for row in rows:
        cols = row.find_all('td')
        for ele in cols:
            if len(ele.text.split(' '))<3:
               ele.string.replace_with("")

print(soup)

Выход :

<html>
<head>
<title>HTML Tables</title>
</head>
<body>
<table border="1">
<tr>
<td><p><span>Row 1, Column 1, This should be kept because it has more than two tokens</span></p></td>
<td><p><span></span></p></td>
</tr>
<tr>
<td><p><span>Row 2, Column 1, should be kept</span></p></td>
<td><p><span>Row 2, Column 2, should be kept</span></p></td>
</tr>
</table>
</body>
</html>
...