CSVデータベース/Ruby配列にスクレイプしようとしているページには、不均一なサイズのグループの合計470のレコードがリストされており、各グループの前に日付があります(合計22の一意の日付)。
グループはHTMLテーブルに編成されておらず、「親」が各グループの日付につながる可能性のあるDOMの階層も、<div class="line">
表示されているレコードdivのドライリストのみであり、前にのみが表示されることもあるため、その方法がわかりません。<span class="date">Thursday, May 24, 2012</span>
新しい日付が印刷されるまで、次のXレコードにのみ適用される日付を保持します。
そのirb
中で正しく表示されます:
$page = $agent.get(pageurl) # gets page with Mechanize
doc = $page.parser # returns Nokogiri::HTML
(records = doc.search('html body div#wrapper div#innerwrapper div#content div.line')).size
=> 470
(dates = doc.search('html body div#wrapper div#innerwrapper div#content span.date')).size
=> 22
たとえば、最初の日付を表示します。
doc.search('html body div#wrapper div#innerwrapper div#content span.date')[0].text
=> "Wednesday, May 23, 2012"
私の目標は、CSVファイルに保存する前に、上記の470レコードのdoc.searchのそれぞれにフィールドとして正しい日付を追加することです。
Nokogiri(またはMechanize)は、DOM内の位置に基づいて、つまり次の直後でdates[N].text
あるが次の前に、グループでこれらのレコードを取得するのに役立ちます<span class="date">
か?
Nを0から21まで繰り返して、470レコードすべてのマスター配列/ CSVオブジェクトに追加できますが、グループごとに適切なdate
フィールドを追加します。