<> становится <> в BeautifulSoup - PullRequest
1 голос
/ 07 января 2020

Предположим, у меня есть элемент div, div - объект Beautifulsoup (полученный с помощью findAll). Источник выглядит так:

<div>text1 <span>text2</span></div>

Я хочу заменить текст1 на текст3. Я пытался:

  1. div.string.replace_with(newstr), where newstr="text3 <span>text2</span>" Это не работает, потому что div.string отсутствует

  2. div.replace_with(newstr)
    Это не работает потому что окончательный результат показывает &lt и &gt, а не "<" и ">", когда я сохраняю код html в файл.

Ответы [ 2 ]

1 голос
/ 07 января 2020

Вы можете найти тег div, а затем найти next_element, который равен text1, а затем replace_with text3

from bs4 import BeautifulSoup

html= '''<div>text1 <span>text2</span></div>'''
soup = BeautifulSoup(html, 'lxml')
soup.find('div').next_element.replace_with('text3')
print(soup)
0 голосов
/ 07 января 2020

Просто поиграемся с интерактивной подсказкой ... Я уверен, что есть лучшее решение, но ...

from bs4 import BeautifulSoup

data = '''<div>text1 <span>text2</span></div>'''
soup = BeautifulSoup(data, features="lxml")
div = soup.find('div')
a, *b = div.contents
c = a.replace('text1', 'text3')
a.replace_with(c)
print(div)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...