5

HTMLファイル(utf-8でエンコード)があります。で開きますcodecs.open()。ファイルアーキテクチャは次のとおりです。

<html>
// header
<body>
  // some text
  <table>
    // some rows with cells here
    // some cells contains tables
  </table>
  // maybe some text here
  <table>
    // a form and other stuff
  </table>
  // probably some more text
</body></html>

最初のテーブルのみを取得する必要があります(フォームのあるテーブルを破棄します)。<table>最初の前と対応する後のすべての入力を省略します</table>。一部のセルには、段落、太字、スクリプトも含まれています。メインテーブルの行ごとにネストされたテーブルは1つだけです。

それを抽出して行のリストを取得するにはどうすればよいですか?各要素はプレーン(ユニコード文字列)セルのデータとネストされた各テーブルの行のリストを保持しますか?ネストのレベルは1つだけです。

HTMLParse、PyParse、およびreモジュールを試しましたが、これを機能させることができません。私はPythonにまったく慣れていません。

4

3 に答える 3

5

美しいスープをお試しください

原則として、実際のパーサー(Beaut。Soup)を使用する必要があります。コンピューター科学上の理由から、正規表現はネストされた要素を処理できません(有限状態マシンは、文脈自由文法、IIRCを解析できません)。

于 2009-06-03T14:07:04.163 に答える
4

あなたはlxmlが好きかもしれません。あなたがその構造で何をしたいのか本当に理解したかどうかはわかりませんが、この例が役立つかもしれません...

import lxml.html

def process_row(row):
    for cell in row.xpath('./td'):
       inner_tables = cell.xpath('./table')
       if len(inner_tables) < 1:
           yield cell.text_content()
       else:
           yield [process_table(t) for t in inner_tables]

def process_table(table):
    return [process_row(row) for row in table.xpath('./tr')]

html = lxml.html.parse('test.html')
first_table = html.xpath('//body/table[1]')[0]

data = process_table(first_table))
于 2009-06-03T14:29:27.253 に答える
2

HTMLが整形式の場合は、それをDOMツリーに解析し、XPathを使用して必要なテーブルを抽出できます。私は通常、XMLの解析にlxmlを使用しますが、 HTMLも解析できます

最初のテーブルを引き出すためのXPathは「//table[1]」になります。

于 2009-06-03T14:13:23.853 に答える