замена HTML-тегов на BeautifulSoup - PullRequest
       3

замена HTML-тегов на BeautifulSoup

1 голос
/ 11 октября 2010

В настоящее время я переформатирую некоторые HTML-страницы с BeautifulSoup, и я столкнулся с небольшой проблемой.

Моя проблема в том, что в оригинальном HTML есть такие вещи:

<li><p>stff</p></li>

и

<li><div><p>Stuff</p></div></li>

а также

<li><div><p><strong>stff</strong></p></div><li>

С BeautifulSoup я надеюсь исключить теги div и p, если они существуют, но сохранить сильный тег.

Я просматриваю красивую документацию по супу и не могу ее найти. Идеи?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 11 октября 2010

То, что вы хотите сделать, можно сделать с помощью replaceWith. Вы должны продублировать элемент, который хотите использовать в качестве замены, и затем передать его в качестве аргумента replaceWith. Документация для replaceWith довольно ясно показывает, как это сделать.

2 голосов
/ 09 декабря 2013

Этот вопрос, вероятно, относится к более старой версии BeautifulSoup, потому что с bs4 вы можете просто использовать функцию unwrap :

s = BeautifulSoup('<li><div><p><strong>stff</strong></p></div><li>')
s.div.unwrap()
>> <div></div>
s.p.unwrap()
>> <p></p>
s
>> <html><body><li><strong>stff</strong></li><li></li></body></html>
1 голос
/ 11 октября 2010

Вы можете написать свою собственную функцию для удаления тегов:

import re

def strip_tags(string):
    return re.sub(r'<.*?>', '', string)

strip_tags("<li><div><p><strong>stff</strong></p></div><li>")
'stff'
0 голосов
/ 08 декабря 2018

Простое решение получить весь узел означает div:

  1. Преобразовать в строку
  2. Заменить <tag> на требуемый тег / строку.
  3. Заменить соответствующий тег пустой строкой.
  4. Преобразовать преобразованную строку в синтаксическую строку, передавая Beautifulsoup

    Что я сделал для mint

    Пример:

    <div class="col-md-12 option" itemprop="text">
    <span class="label label-info">A</span>
    
    **-2<sup>31</sup> to 2<sup>31</sup>-1**
    

    sup = opt.sup 
        if sup: //opt has sup tag then
    
             //opts converted to string. 
             opt = str(opts).replace("<sup>","^").replace("</sup>","") //replacing
    
             //again converted from string to beautiful string.
             s = BeautifulSoup(opt, 'lxml')
    
             //resign to required variable after manipulation
             opts = s.find("div", class_="col-md-12 option")
    

    Выход:

    -2^31 to 2^31-1
    without manipulation it will like this (-231 to 231-1)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...