2017-11-23 8 views
0

私はlxmlパーサを介してHTMLを解析するのにBeautifulSoupを使用します。 <table>タグが適切に閉じられているものの不正な形式のHTMLを処理します(終了タグなし)

<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr> 
<th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ... 

:しかし、私は<table>内部の終了タグを持たないファイルに遭遇しました。

+1

のための「tidiedHtml」を使用し、あなたはすでに成功せず、それを解析してみましたか? htmlパーサのポイントの半分は、ブラウザのようにひどく形成されたHTMLを許容できるということです。行方不明の終了タグは問題を提出してはならない。 –

+0

@ C.Feenstraはいくつかの 'td'を認識するが、しばしば分割に失敗する。私は後でサンプルファイルを作成しようとします – Winand

答えて

0

個人的に私は自分自身でこの問題に遭遇し、tidylibを使用してHTMLTidy 5を通してドキュメント全体を実行します。私がC. Feenstra lxmlパーサに同意すると、不正な形式のHTMLを許容することができます。あなたが本当にlxmlのパーサで解析できないHTMLを持っている場合、この試してみてください。

from tidylib import tidy_document 

badHtml = "<table id='reportTable' class='report-table' style='width:auto' cellspacing='0'><tr><th>Номер<br>поезда<th>Дата<br>отправления<th>Маршрут<th>Причина<th>Комментарий<th>Станция ..." 
options = {"output-bom": 0, "quiet": False, "word-2000": True, 
      "output-encoding": 'utf8', "output-xhtml": 1, "add-xml-decl": 0, 
      "tidy-mark": 0, "drop-proprietary-attributes": True, 
      "show-warnings": False, } 
tidiedHtml, errors = tidy_document(badHtml, options) 

を次にBeautifulSoup

+0

それは、ありがとう!私は 'pytidylib'とhttp://binaries.html-tidy.orgから' tidy.dll 'をインストールしました。私の入力エンコーディングは 'cp1251'なので、生データを' utf-8'にプリエンコードしなければなりませんでした – Winand

関連する問題