Как убрать содержимое тегов <a>и <strike>? - PullRequest
0 голосов
/ 12 декабря 2018

Я хотел бы получить текст всех тегов p, удалив все содержимое внутри тегов a и strike.

Часть HTML-страницы:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

   <a href="Emendas/Emc/emc45.htm#art1">(Incluído pela Emenda Constitucional nº 45, de 2004)</a>
   <a href="../CONGRESSO/DLG/DLG-186-2008.htm">DLG nº 186, de 2008</a>
   <a href="../_Ato2007-2010/2009/Decreto/D6949.htm"><font size="2">DEC 6.949, 
    de 2009</font></a>
</p>
<p style="margin-top: 0; margin-bottom: 0"><strike>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium</strike></p> 

Это то, что я пытаюсь сделать, но это не работает:

VALID_TAGS = ['a','strike']
for string in soup.body.descendants:
    if string.name not in VALID_TAGS:
      if isinstance(string, NavigableString):
        print (string)

Ожидаемый результат:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

1 Ответ

0 голосов
/ 12 декабря 2018

можно попробовать decompose()

html ='''
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 

   <a href="Emendas/Emc/emc45.htm#art1">(Incluído pela Emenda Constitucional nº 45, de 2004)</a>
   <a href="../CONGRESSO/DLG/DLG-186-2008.htm">DLG nº 186, de 2008</a>
   <a href="../_Ato2007-2010/2009/Decreto/D6949.htm"><font size="2">DEC 6.949, 
    de 2009</font></a>
</p>
<p style="margin-top: 0; margin-bottom: 0"><strike>Lorem ipsum dolor sit amet, consectetur adipiscing elit, </strike></p>
'''

soup = BeautifulSoup(html, 'html.parser')

for p in soup.findAll('p'):
    for tag in p.findAll(True):
        if tag.name in ['a', 'strike']:
            tag.decompose()
    print(p.text.strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...