2015-04-12 5 views
0

У меня есть некоторые HTML-файлы, каждый из которых содержитУдалить совпадающие теги в html-файлах?

<td id="MenuTD" style="vertical-align: top;"> 
... 
</td> 

где ... может содержать что-либо, и </td> матчи <td id="MenuTD" style="vertical-align: top;">. Я хотел бы удалить эту часть из html-файлов.

Аналогичным образом, я могу также удалить некоторые другие теги в файлах.

Как мне запрограммировать это на Python?

Я смотрю модуль HTMLParser в Python 2.7, но не понял, может ли это помочь.

ответ

1

Вы можете выполнить это, используя BeautifulSoup. У вас есть два варианта, в зависимости от того, что вы хотите сделать с элементом, который вы удаляете.

Настройка:

from bs4 import BeautifulSoup 

html_doc = """ 
<html> 
    <header> 
     <title>A test</title> 
    </header> 
    <body> 
     <table> 
      <tr> 
       <td id="MenuTD" style="vertical-align: top;"> 
        Stuff here <a>with a link</a> 
        <p>Or paragraph tags</p> 
        <div>Or a DIV</div> 
       </td> 
       <td>Another TD element, without the MenuTD id</td> 
      </tr> 
     </table> 
    </body> 
</html> 
""" 

soup = BeautifulSoup(html_doc) 

  • Вариант 1 является использование метода extract(). Используя это, вы сохраните копию извлеченного элемента, так что вы можете использовать его позже в вашем приложении:

Код:

menu_td = soup.find(id="MenuTD").extract() 

В этот момент элемент вы удаляете были сохранены к переменной menu_td. Делай то, что ты хочешь. нет Ваш HTML в переменной soup больше не содержит ваш элемент, хотя:

print(soup.prettify()) 

Выходы:

<html> 
<header> 
    <title> 
    A test 
    </title> 
</header> 
<body> 
    <table> 
    <tr> 
    <td> 
    Another TD element, without the MenuTD id 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 

Все в MenuTD элемент был удален. Вы можете видеть, что все еще находится в переменной menu_td хотя:

print(menu_td.prettify()) 

Выходы:

<td id="MenuTD" style="vertical-align: top;"> 
Stuff here 
<a> 
    with a link 
</a> 
<p> 
    Or paragraph tags 
</p> 
<div> 
    Or a DIV 
</div> 
</td> 
  • Вариант 2: Использование .decompose(). Если вам не нужна копия удаленного элемента, вы можете использовать эту функцию, чтобы удалить ее из документа и уничтожить содержимое.

Код:

soup.find(id="MenuTD").decompose() 

Он ничего не возвращает (в отличие от .extract()). Это, однако, удалить элемент из документа:

print(soup.prettify()) 

Выходы:

<html> 
<header> 
    <title> 
    A test 
    </title> 
</header> 
<body> 
    <table> 
    <tr> 
    <td> 
    Another TD element, without the MenuTD id 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 
Смежные вопросы