2017-09-13 6 views
1

BeautifulSoup4 v4.6.0とlxml v3.8.0がインストールされています。私は以下を解析しようとしていますxhtmllxml xmlパーサーによるBeautifulSoup4は、xhtmlファイルのインラインsvgからxmlns属性を削除します。

私のコードは解析する:私はスープを検査する際

from bs4 import BeautifulSoup 

xhtml_string = """ 
<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    </head> 

    <body class="sgc-1"> 
     <svg xmlns="http://www.w3.org/2000/svg" height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 600 800" width="100%" xmlns:xlink="http://www.w3.org/1999/xlink"> 
     <image height="800" width="573" xlink:href="../Images/Cover.jpg"></image> 
     </svg> 
    </body> 
</html> 
""" 

soup = BeautifulSoup(xhtml_string, 'xml') 

はしかし、BeautifulSoupが<image>タグのhref属性にxmlns="http://www.w3.org/2000/svg"<svg>タグのxmlns:xlink="http://www.w3.org/1999/xlink"xlink接頭辞を取り除いたことが表示されます。

はすなわちsoup.prettify()私は選択肢を持っていない

<?xml version="1.0" encoding="unicode-escape"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    </head> 
    <body class="sgc-1"> 
    <svg height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 600 800" width="100%"> 
     <image height="800" href="../Images/Cover.jpg" width="573"/> 
    </svg> 
    </body> 
</html> 

次のソースxhtmlを変更するには戻って、私が見たものからxmlns宣言は有効です。 BeautifulSoupをそのままxhtmlのままにする方法はありますか?

答えて

0

xmlの代わりにlxmlパーサーを使用する必要があります。

soup = BeautifulSoup(xhtml_string, 'lxml') 
関連する問題