2014-01-25 6 views
13

Попытка получить голову вокруг html-конструкции с BS.Как я могу вставить новый тег в объект BeautifulSoup?

Я пытаюсь вставить новый тег:

self.new_soup.body.insert(3, """<div id="file_history"></div>""") 

, когда я проверить результат, я получаю:

&lt;div id="file_histor"y&gt;&lt;/div&gt; 

Так я вставить строку, будучи продезинфицировать для websafe HTML ..

То, что я ожидал увидеть это:

<div id="file_history"></div> 

Как вставить новый тег div в положение 3 с идентификатором file_history?

ответ

7

Используйте фабричный метод для создания новых элементов:

new_tag = self.new_soup.new_tag('div', id='file_history') 

и вставьте его:

self.new_soup.body.insert(3, new_tag) 
+0

Ах, ОК. Благодарю. Это двухэтапный процесс, и я пытался обмануть. Оценил. –

20

Смотрите документацию на how to append a tag:

soup = BeautifulSoup("<b></b>") 
original_tag = soup.b 

new_tag = soup.new_tag("a", href="http://www.example.com") 
original_tag.append(new_tag) 
original_tag 
# <b><a href="http://www.example.com"></a></b> 

new_tag.string = "Link text." 
original_tag 
# <b><a href="http://www.example.com">Link text.</a></b> 
7

Другие ответы сразу от документации. Вот краткое сообщение:

from bs4 import BeautifulSoup 

temp_soup = BeautifulSoup('<div id="file_history"></div>') 
# BeautifulSoup automatically add <html> and <body> tags 
# There is only one 'div' tag, so it's the only member in the 'contents' list 
div_tag = temp_soup.html.body.contents[0] 
# Or more simply 
div_tag = temp_soup.html.body.div 
your_new_soup.body.insert(3, div_tag) 
Смежные вопросы