3

これは、Webスクレイピングの問題です。<table>aがレイアウトに使用されているのか、これまでに見たことのないHTMLドキュメントのデータに使用されているのかを自動的に判断するための認識されているアプローチは何ですか?

HTMLページ内のすべてのデータテーブルを吐き出す関数に文字列として任意のHTMLファイルを渡せるようにしたいのですが、純粋にレイアウトに使用されるテーブルは無視します。ただし、http://news.ycombinator.com/newcommentsのようなサイトでは、レイアウトにHTMLテーブルを使用しているため、注意が必要です。

この関数は、特定のWebサイトのDOM構造に合わせて調整するべきではないため、任意のHTML文字列で機能する必要があります(または可能な限り高い成功率を持つ必要があります)。

レイアウトテーブルとデータテーブルを区別できる、人々が長年にわたって理解してきたアルゴリズム/チェックはありますか?それは可能であるはずです、それはすべての変数と試行/エラーを書き留めるだけの問題です-私は多くの人々がすでにどこかに計画を立てていると思います。

私は必ずしも関数を必要としません(それは素晴らしいでしょうが、それは多くの微調整を必要とするだろうと思います)。いくつかの試みられた戦略を探しているだけです。

アップデート

これが良いスタートです(@JaredFarrishに感謝します):

4

1 に答える 1

3

レイアウトに使用されるテーブルは、一般的に

  • 行が少なく、行ごとのセルが少ない。
  • 長さが非常に一貫性のないコンテンツがセルに含まれている
  • セル内に多くの HTML がある
  • colspan / rowspan を使用できます
  • DOM の上部近くに存在する
  • 利用しない、<th>または<thead>
  • 他のテーブルを含む

データに使用されるテーブルは、一般的に

  • より多くの行と、行ごとにより多くのセルを持つ
  • 長さが合理的に一貫しているセル内のコンテンツを持っている
  • セル内の HTML の構造化を欠いている( <div>、など<p><b><strong>
  • おそらくcolspanを使用せず、おそらくrowspanを使用しない
  • 他のテーブルを含まない

テーブルをスクレイピングし、これらの基準に基づいて評価してスコアを付け、スコアと重みを適用し、最終的なスコアを使用して、それがレイアウトかデータかを判断します。

于 2012-07-02T17:39:48.297 に答える