HTMLのセクションから最初のテーブル(最初のテーブルタグのマテリアルではない)を抽出する必要があります。テーブルは複数のページに分散している可能性があるため、複数のテーブルタグの下にある可能性があります。セクションに複数のテーブルが存在する場合があります。私の論理は、テーブルタグの間にテキストノードがある場合、それらは異なるテーブルであるということです。テーブルタグの間にテキストノードがない場合、それらは1つのテーブルの一部です。どうすればこれを実装できますか?
最初にregexpを使用して各テキストノードをチェックすることで適切なセクションを特定する必要があるため、xpathを使用して最初のテーブルを検索しませんでした。
html='<body>
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
<table border="1">
<tr>
<td>row 3, cell 1</td>
<td>row 3, cell 2</td>
</tr>
<tr>
<td>row 4, cell 1</td>
<td>row 4, cell 2</td>
</tr>
</table>
<p>text </p> # Split by text, the below is a different table
<table border="1">
<tr>
<td>row 5, cell 1</td>
<td>row 5, cell 2</td>
</tr>
<tr>
<td>row 6, cell 1</td>
<td>row 6, cell 2</td>
</tr>
</body>'
これは私の現在のコードであり、最初のTABLEではなく最初のテーブルタグのみを取得します(サンプルの行1〜4)。テーブルの抽出にはgemtablerパーサーを使用しました。
require 'nokogiri'
require 'table_parser'
doc = Nokogiri::HTML(html)
table = Array.new
i = 0
doc.traverse do |node|
if node.name == 'table' && i == 0
table = TableParser::Parser::extract_table(node, node.path)
i +=1
end
end
puts table