Python プログラムを使用して、さまざまな HTML ページからデータを抽出しようとしています。残念ながら、これらのページの一部にはユーザーが入力したデータが含まれており、「わずかな」エラー (タグの不一致) が発生することがあります。
Python の xml.dom にエラーやそのようなものを修正させる良い方法はありますか? あるいは、エラーを含む可能性のある HTML ページからデータを抽出するより良い方法はありますか?
Python プログラムを使用して、さまざまな HTML ページからデータを抽出しようとしています。残念ながら、これらのページの一部にはユーザーが入力したデータが含まれており、「わずかな」エラー (タグの不一致) が発生することがあります。
Python の xml.dom にエラーやそのようなものを修正させる良い方法はありますか? あるいは、エラーを含む可能性のある HTML ページからデータを抽出するより良い方法はありますか?
HTML Tidyを使用してクリーンアップするか、Beautiful Soupを使用して解析することができます。結果を一時ファイルに保存する必要があるかもしれませんが、うまくいくはずです。
乾杯、
jython が受け入れられる場合、tagsoup はがらくたの解析に非常に優れています。そうであれば、jdom ライブラリは他の xml の代替手段よりもはるかに使いやすいことがわかりました。
これは、tfl のジャーニー プランナーからのスクリーン スクレイピングを行うデモ モックアップのスニペットです。
プライベート ドキュメント getRoutePage(HashMap params) が例外をスローします { 文字列 uri = "http://journeyplanner.tfl.gov.uk/bcl/XSLT_TRIP_REQUEST2"; HttpWrapper hw = new HttpWrapper(); 文字列ページ = hw.urlEncPost(uri, params); SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser"); リーダー pageReader = new StringReader(page); builder.build(pageReader); を返します。 }
私はそのようなタスクに BeautifulSoup を使用していましたが、現在はHTML5lib ( http://code.google.com/p/html5lib/ ) に移行しており、BeautifulSoup が失敗する多くの場合にうまく機能します。
別の方法として、ElementTree を使用した Beautiful Soup のラッパーである「 Element Soup」( http://effbot.org/zone/element-soup.htm ) を使用する方法があります。
lxmlは、無効な HTML の解析において適切な仕事をします。
ドキュメントによると、入力によってはBeautiful Soupとhtml5libのパフォーマンスが向上することがあります。lxml を使用すると、使用するパーサーを選択し、統合された API を介してそれらにアクセスできます。