2016-10-05 6 views
2

Пусть говорят, у меня есть следующий IFRAMEДобавить контент IFrame с BeautifulSoup

s="""" 
<!DOCTYPE html> 
<html> 
<body> 

<iframe src="http://www.w3schools.com">   
    <p>Your browser does not support iframes.</p> 
</iframe> 

</body> 
</html> 
""" 

Я хочу, чтобы заменить все содержимое с этой строкой «это замена» Если я использую

dom = BeatifulSoup(s, 'html.parser') 
f = dom.find('iframe') 
f.contents[0].replace_with('this is the replacement') 

Тогда вместо замены всего содержимого я заменю только первый символ, который в этом случае является новой строкой. Также это не работает, если iframe полностью пуст, потому что f.contents [0] не указана

+0

Вы хотите заменить все содержимое в 'iframe' тега? – Prabhakar

+0

Да, но не уничтожить тег – LetsPlayYahtzee

ответ

2

Просто установите .string property:

from bs4 import BeautifulSoup 

data = """ 
<!DOCTYPE html> 
<html> 
<body> 

<iframe src="http://www.w3schools.com"> 
    <p>Your browser does not support iframes.</p> 
</iframe> 

</body> 
</html> 
""" 

soup = BeautifulSoup(data, "html.parser") 
frame = soup.iframe 

frame.string = 'this is the replacement' 

print(soup.prettify()) 

Печать:

<!DOCTYPE html> 
<html> 
<body> 
    <iframe src="http://www.w3schools.com"> 
    this is the replacement 
    </iframe> 
</body> 
</html> 
+0

Знаете ли вы, каким образом я могу это сделать, даже если замена не просто строка? – LetsPlayYahtzee

+0

@LetsPlayYahtzee Вы имеете в виду, что строка repl на самом деле является фрагментом HTML? – alecxe

+0

да, я открыл новый [вопрос] (http://stackoverflow.com/questions/39891983/how-to-add-outer-tag-to-beautifulsoup-object), относящийся к этому – LetsPlayYahtzee

0

Это будет работать для вас, чтобы заменить содержимое тега iframe.

s=""" 
<!DOCTYPE html> 
<html> 
<body> 
<iframe src="http://www.w3schools.com"> 
    <p>Your browser does not support iframes.</p> 
</iframe> 
</body> 
</html> 
""" 
from BeautifulSoup import BeautifulSoup 
from HTMLParser import HTMLParser 

soup = BeautifulSoup(s, convertEntities=BeautifulSoup.HTML_ENTITIES) 
show= soup.findAll('iframe')[0] 
show.replaceWith('<iframe src="http://www.w3schools.com">this is the replacement</iframe>'.encode('utf-8')) 
html = HTMLParser() 
print html.unescape(str(soup.prettify())) 

Выход:

<!DOCTYPE html> 
<html> 
<body> 
    <iframe src="http://www.w3schools.com">my text</iframe> 
</body> 
</html> 
+0

Я искал способ, которым мне не нужно было бы снова создавать тег, знаете ли вы об этом? – LetsPlayYahtzee

Смежные вопросы