Как изменить имя тега с BeautifulSoup? - PullRequest
12 голосов
/ 13 марта 2011

Я использую python + BeautifulSoup для разбора HTML-документа.

Теперь мне нужно заменить все <h2 class="someclass"> элементы в HTML-документе на <h1 class="someclass">.

Как изменить имя тега, не изменяя ничего в документе?

Ответы [ 3 ]

19 голосов
/ 13 марта 2011

Я не знаю, как вы получаете доступ к tag, но у меня работает следующее:

import BeautifulSoup

if __name__ == "__main__":
    data = """
<html>
<h2 class='someclass'>some title</h2>
<ul>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
   <li>Vestibulum auctor dapibus neque.</li>
</ul>
</html>

    """
    soup = BeautifulSoup.BeautifulSoup(data)
    h2 = soup.find('h2')
    h2.name = 'h1'
    print soup

Вывод команды print soup:

<html>
<h1 class='someclass'>some title</h1>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
<li>Vestibulum auctor dapibus neque.</li>
</ul>
</html>

Как видите, h2 стало h1. И больше ничего в документе не изменилось. Я использую Python 2.6 и BeautifulSoup 3.2.0.

Если у вас более одного h2 и вы хотите изменить их все, вы можете просто сделать:

soup = BeautifulSoup.BeautifulSoup(your_data)
while True: 
    h2 = soup.find('h2')
    if not h2:
        break
    h2.name = 'h1'
1 голос
/ 07 мая 2011

Это просто:

tag.name = 'new_name'
0 голосов
/ 13 марта 2011

С BeautifulSoup docs

from BeautifulSoup import BeautifulSoup, Tag
soup = BeautifulSoup("<h2 class="someclass">TEXTHERE</h2>")
tag = Tag(soup, "h1", [("class", "someclass")])
tag.insert(0, "TEXTHERE")
soup.h2.replaceWith(tag)
print soup
# <h1 class="someclass">TEXTHERE</h1>
...