ファイルを読み込んで、を使用してツリーを作成しました
my_tree = html.fromstring(html_string)
それから私はすべてのテーブルを分離しました
tables = my_tree.xpath('//table')
現在、私はテーブルで遊んでおり、ドキュメント内でモデルテーブルに最も近いものを見つけるためのアプローチを開発しようとしています。検討できるすべての属性をリストし、テストテーブルの行数と比較するために各テーブルの行数の検討を実装する方法を見つけようと考えました。
だから私はしました
table_lens = [len(table.xpath('//tr')) for table in tables]
興味深いのは、table_lensリストのすべての値が同じであるということです。
値はドキュメント内のtrの総数だと思います(大まかに正しいようです)
各テーブルの行数に対応する一意の値を持つことを期待していました。
これは興味深いことです。なぜなら、私は2つのテーブルのtr要素も「見て」いたからです。
for tr in tables[20].xpath('//tr'):
tr
そして、大まかな検査は、ダンプされたtr要素がそれぞれ同じメモリ位置を参照していることを示しているので、私はそれを行いました
tables[20].xpath('//tr') == tables[50].xpath('//tr')
通訳が戻ってきました
True
したがって、これは魅力的です。特定のテーブルに属する行だけを操作すると思いましたが、代わりに、すべてのテーブルのすべての行を取得しています。
これらすべてに加えて、各テーブル[インデックス]のテーブル[インデックス] .text_content()は一意であることに注意してください。
テーブル内の各テーブルが一意であることを確認するために、私もこれを行いました
>>> tables[20]
<Element table at 0x3260e60>
>>> tables[50]
<Element table at 0x3273570>
>>>
以下のAbarnertのコメントは、動作がファイルに関する何かによるものであることを示唆しています。興味深い可能性がありますが、コメントが投稿された後、2番目のファイルを作成して同じ結果が得られました。しかし、ここにサンプルのhtmファイルがあります
http://www.sec.gov/Archives/edgar/data/22252/000119312512253074/d360877ddef14a.htm
この2番目の例では、33個の一意のテーブルがあり、それぞれに173trがあります。
XPathでは、//tr
は絶対パスです。つまり、ドキュメントの先頭からのすべてのtrノードです。tr
は相対パスです。現在のノードの下にあるすべてのtrノードです。ファイル名の/foo
代わりに使用するのと同じfoo
です。
だから、これを行うだけです:
table_lens = [len(table.xpath('tr')) for table in tables]
そして、あなたは1から14までのさまざまな異なる数字を得るでしょう(あるいはそれ以上、私はリスト全体を見ていませんでした)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加