2011-10-31 2 views
1

私はhtmlで解析する必要がありますが、htmlを修正するためにPython解析ライブラリは必要ありません。使用するツールやメソッドに関する提案(Pythonで)?私の状況では、htmlが不正であれば、スクリプトは処理を終了する必要があります。私はBeautifulSoupを試しましたが、修正したくないものを修正しました。私は、テンプレートファイルを解析し、別の変換されたテンプレートスタイルを出力するツールを作成しています。HTMLパーサーHTMLを修正せずにPythonで

+0

か:代わりにHTMLを解析するための昔ながらの美しいスープライブラリのあなたはlxmlのを見てしなければならない理由のアイデアのために独特のイアンBickingことで、このブログ記事を参照してください。あなた自身のパーサをコーディングしたいですか? – Victor

+0

私は良いスタート地点はあなたが修正しようとしていると思いますか? –

+0

彼は何も修正したくないと言った。 – Victor

答えて

1

私はBeautifulStoneSoupはあなたがselfclosingタグのリスト

に渡す場合BeautifulStoneSoupの最も一般的な欠点は、それが タグをselfclosingについて知っていないということですこれを行うことができると信じて。 HTMLにはセルフクローズの固定されたセット タグがありますが、XMLではDTDの内容に依存します。あなたはコンストラクタにselfClosingTags引数として に自分の名前を渡すことで特定のタグが自動閉鎖していること BeautifulStoneSoupを伝えることができます:

from BeautifulSoup import BeautifulStoneSoup 
xml = "<tag>Text 1<selfclosing>Text 2" 
print BeautifulStoneSoup(xml).prettify() 
# <tag> 
# Text 1 
# <selfclosing> 
# Text 2 
# </selfclosing> 
# </tag> 

print BeautifulStoneSoup(xml, selfClosingTags=['selfclosing']).prettify() 
# <tag> 
# Text 1 
# <selfclosing /> 
# Text 2 
# </tag> 
3

ブックFoundations of Python Network Programmingが、それはこすり取る際にはどのように見えるかの詳細な比較を持っていますBeautiful Soupとlxmlライブラリと同じWebページ。しかし、一般的に、lxmlはより速く、より効果的であり、Python標準(Python標準ライブラリに付属しているElementTree API)に密接に従うAPIを持っています。あなたには、いくつかすでに作成されたコードを探してい

http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/

+0

lxmlの標準XMLパーサは、不正な形式のHTMLで例外を発生させ、HTMLパーサであり、エラーを修正します。 –

+0

はい、良い点 - lxmlの寛大なHTMLパーサーを使用してください。標準XMLパーサーではありません。 :) –

関連する問題