【发布时间】:2013-04-05 12:51:09
【问题描述】:
在 BeautifulSoup 3 之前的版本中,我可以获取任何 HTML 块并以这种方式获取字符串表示形式:
from BeautifulSoup import BeautifulSoup
soup3 = BeautifulSoup('<div><b>soup 3</b></div>')
print unicode(soup3)
'<div><b>soup</b></div>'
但是对于 BeautifulSoup4,相同的操作会创建额外的标签:
from bs4 import BeautifulSoup
soup4 = BeautifulSoup('<div><b>soup 4</b></div>')
print unicode(soup4)
'<html><body><div><b>soup 4</b></div></body></html>'
^^^^^^^^^^^^ ^^^^^^^^^^^^^^
我不需要 BS4 添加的外部 <html><body>..</body></html> 标签。我查看了 BS4 文档并在类内部进行了搜索,但找不到任何用于抑制输出中额外标签的设置。我该怎么做?降级到 v3 不是一种选择,因为 BS3 中使用的 SGML 解析器不如 BS4 中的 lxml 或 html5lib 解析器好。
【问题讨论】:
-
我认为是 stackoverflow.com/q/14822188/57318 的欺骗?
-
@Xymotech 是的,但是在该问题中建议的解决方案是更改解析器,恕我直言不是最佳选择。例如,因为
lxml真的很酷.. 显然我需要做的是soup2.html.body.contents[0]但有更好的选择吗? -
啊,我没有意识到它实际上改变了它使用的解析器。嗯......它还说你可以做
soup.body.next。这行得通吗? -
@Xymotech:
soup.body.next完成了这项工作!谢谢 Xymotech -
@ccpizza:您只是需要它在您的计算机上工作,还是需要分发它?
标签: python beautifulsoup