2016-09-16 7 views
2

lxmlを使ってBeautifulSoupを使ってXMLファイルを解析してナビゲートします。BeautifulSoupはlxml解析エラーを抑制しますか?

私は奇妙な動作に気付きました。 Beautifulsoupは、不正な形式のXMLファイルを読み込むときにlxmlパーサーによってスローされる例外を抑制します(例えば切り捨てられた文書や欠落する終了タグなど)。

例:それは(見つける)と、そのような壊れたXMLツリーをナビゲートすることも可能にコールするよ

from bs4 import BeautifulSoup 
soup = BeautifulSoup("<foo><bar>trololo<", "xml") # this will work 

...

はのは、純粋なlxmlのとまったく同じ不正な文書を読んでみましょう:

from lxml import etree 
root = etree.fromstring("<foo><bar>trololo<") # will throw XMLSyntaxError 

なぜですか?私はBeautifulSoup自体が何の解析もしていないことを知っています。それはlxml(または他のパーサ)のラッパーライブラリです。しかし、XMLが不正な形式であると、実際にエラーが発生することに興味があります。終了タグがありません。私はちょうど基本的なXML構文検証(XSDスキーマの検証に興味がない)が欲しい。

答えて

1

あなたが行動を複製する場合は、パーサを渡す= Trueのを回復を設定することができます:あなたはBS4ソースコードを見れば

<foo><bar>trololo</bar></foo> 

from lxml import etree 

root = etree.fromstring("<foo><bar>trololo<",parser=etree.XMLParser(recover=True)) # will throw XMLSyntaxError 

print(etree.tostring(root)) 

出力をビルダーディレクトリ_lxml.pyとその中に表示されます:

デフォルトでは0

lxmlののHTMLParserセットこれは、それはあなたがしようとすると、回復することを指定する必要がありXMLで、壊れたHTMLを扱うことができるように。

関連する問題