HTMLからノードを抽出する必要があります(内部テキストではないので、さらに手動で調査するために形式を保持できます)。以下のコードを書きました。しかし、トラバースがどのように機能するかにより、新しいhtmlファイルに重複が生じました。
これは、解析する実際のhtmlです。http://www.sec.gov/Archives/edgar/data/1750/000104746912007300/a2210166z10-k.htm
基本的には、Item10と「登録者の執行役員」の間にある部分を次のItemに抽出する必要があります。項目10はすべての文書に含まれていますが、「登録者の執行役員」はすべての文書に含まれているわけではありません。テーブルを保持したいので、テキストだけでなくノードを取得する必要があります。次のステップでは、これらのセクションにテーブルがある場合は、それらを解析できます。
サンプルhtml:
html = "
<BODY>
<P>Dont need this </P>
<P>Start</P>
<P>Text To Extract 1 </P>
<P><Font><B>Text to Extract 2 </B></Font></P>
<DIV><TABLE>
<TR>
<TD>Text to Extract 3</TD>
<TD>Text to Extract 4</TD>
</TR>
</TABLE></DIV>
<P>End</P>
</BODY>
"
私は手に入れたい:
html = "
<BODY>
<P>Start</P>
<P>Text To Extract 1 </P>
<P><Font><B>Text to Extract 2 </B></Font></P>
<DIV><TABLE>
<TR>
<TD>Text to Extract 3</TD>
<TD>Text to Extract 4</TD>
</TR>
</TABLE></DIV>
<P>End</P>
</BODY>
"
start_keywordが表示されたら、抽出を開始します。end_keywordが表示されたら、終了して抽出します。
1つのHTMLから抽出する必要のあるセクションが複数あります。キーワードは、異なる名前のノードに表示される場合があります。
doc.at_css('body').traverse do |node|
inMySection = false
if node.text.match(/#{start_keyword}/)
inMySection = true
elsif node.text.match(/#{end_keyword}/)
inMySection = false
end
if inMySection
#Extract the nodes
end
end
また、次の投稿を参照した後、xpathを使用してこれを達成しようとしましたが成功しませんでした。