我认为它一定是个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>
答案 0 :(得分:1)
考虑使用XML解析器:
soup = bs(txt, 'xml')
答案 1 :(得分:1)
这是一个错误。我已经提交了一个修复程序,它将在下一个版本的Beautiful Soup中发布。
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可以建议解决方法