BeautifulSoup 怎么直接插入一段 html 代码?

2016-10-21 15:35:55 +08:00
 vtoexsir
import bs4 import BeautifulSoup as bs
h="<b>b-text</b>"
s=bs(h,'html5lib')
b_s=s.b.string
html_code="<a>a-string</a>"
b_s.replace_with(html_code) 
print b
## <b>&lt;a&gt;a-string&lt;/a&gt;</b>

如上代码可以顺利执行,只是,html_code 里边的尖括号都被 bs 转了. 那怎么样才能让 bs 不要转义我插入的字符串呢? 多谢您的回复!

2582 次点击
所在节点    Python
5 条回复
wyntergreg
2016-10-21 15:52:00 +08:00
vtoexsir
2016-10-22 09:33:08 +08:00
@wyntergreg 多谢您的回复,我知道 bs.replace_with(tag_or_navstr_or_str)的参数是 bs 的 tag 类型或者 navigableString 类型或者干脆是 python 的字符串类型.
我就是想怎么插入一段 html 代码,让 bs 自动正确识别,代码该怎么写?
XYxe
2016-10-22 09:47:02 +08:00
from bs4 import BeautifulSoup
h="<b>b-text</b>"
s= BeautifulSoup(h)
s.b.string.replace_with("")
new_tag = s.new_tag("a")
new_tag.string = "a-string"
s.b.string.insert_before(new_tag)
print s.b
# <b><a>a-string</a></b>
不知道这样符不符合你的要求
vtoexsir
2016-10-24 12:03:47 +08:00
@XYxe 多谢您的回复!
您的方法是常用的路子,可以达到要求.但是这样做逻辑上不太直接.
我的代码(伪代码)一看,就知道是用一段 html 源码替换 b 标签的文本内容.
vtoexsir
2016-10-24 12:04:29 +08:00
看来我是强人所难了!
谢谢各位!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/314439

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX