Python BeautifulSoup在xml定义中的双重问号

时间:2012-04-18 02:18:41

标签: python xml xhtml beautifulsoup

我认为它一定是个bug,所以我发布了一个错误报告here。 另一方面,我可能会遗漏一些东西,所以我需要再看一下代码。

问题是,当我使用.xhtml文件的内容初始化BeautifulSoup时,xml定义在其末尾会得到两个问号。

你能重现这个问题吗?有没有办法避免它?我错过了一个函数,一个方法,一个参数或什么?

编辑0:这是python 2.x上的BeautifulSoup 4。

编辑1:为何选择downvote?


问题:

<?xml version="1.0" encoding="UTF-8"??>

终端输出:

>>> from bs4 import BeautifulSoup as bs
>>> with open('example.xhtml', 'r') as f:
...     txt = f.read()
...     soup = bs(txt)
... 
>>> print txt
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8"/>
    </head>
    <body>
    </body>
</html>

>>> print soup
<?xml version="1.0" encoding="UTF-8"??>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"/>
</head>
<body>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

考虑使用XML解析器:

soup = bs(txt, 'xml')

答案 1 :(得分:1)

这是一个错误。我已经提交了一个修复程序,它将在下一个版本的Beautiful Soup中发布。

The root cause:

  

HTMLParser类使用SGML语法规则来处理指令。使用尾随'?'的XHTML处理指令会导致'?'包含在数据中。

一般情况下,正如ThiefMaster建议的那样,使用“xml”解析器解析XHTML会有更好的结果。

答案 2 :(得分:-1)

在example.xhtml文件中使用'txt'中的变量内容我无法重现Python2.7和相应的BeautifulSoup模块(不是bs4)的问题。对我来说工作得很好和花花公子。

>>> soup = BeautifulSoup.BeautifulSoup(txt)
>>> print soup
<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
</head>
<body>
</body>
</html>

您遇到的问题是什么,例如您的最终目标是什么,也许somoone可以建议解决方法