最近rails+nokogiriを用いてwebスクレイピングを行なっております。
しかし、スクレイピングを行うと言ってもずっとview側でスクレイピングを行なっていたのですが、view側は表示するだけが賢明と聞き、モデルやrakeファイルを用いたスクレイピングを行なってみようと考えたのですが詰まっております。
ちょうどW杯である為、例ではあるのですがサッカー選手の情報が書いてあるページがあるとして(架空の選手名やチーム名)、スクレイピングを行うとします。
<table class=classi> <tr> <td align=right>背番号</td> <td>選手名</td> <td>所属チーム</td> <td align=right>得点</td> <td align=left>(PK)</td> <td align=right>試合数</td> <td align=right>プレー時間</td> <td align=right>得点率</td> </tr> <tr> <td align=right valign=top rowspan=1>1.</td> <td><a href="player">田中</a></td> <td>FC Teratail</td> <td align=right>15</td> <td align=left>(1)</td> <td align=right>35</td> <td align=right>2838</td> <td align=right>0.98</td> </tr> <tr height=1><td colspan=8 class=divide></td></tr> <tr> <td align=right valign=top rowspan=1>2.</td> <td><a href="player1">佐藤</a></td> <td>FC openstackflow</td> <td align=right><b>10</b></td> <td align=left>(2)</td> <td align=right>36</td> <td align=right>2993</td> <td align=right>0.84</td> </tr> . . . </table>
この様にテーブルクラスの中にtrタグで各々の選手のプロフィールが囲まれているとします。
例えば以下の様なcssセレクタを指定したコードを書けばこのクラスの中にあるテキストは取ってこれると思います。
#scrape.rake(レイクファイル) doc = Nokogiri::HTML.parse(html,nil,'Shift_JIS') doc.css('.classi').inner_text
しかし
idやclass等の属性が書いていないものに対してアクセスする方法が分からず、且つそれを作成したレコードの適切なカラムに入れて保存する方法が分かりません。
rails g modelコマンドで作成したテーブルはスクレイピング先の情報に対応した以下の様なテーブル構造、カラム名となっており、各々のカラムに取得した結果を入れていきたいです。
id num player team goals pk playedmatch playedtime scoringrate 1 1 田中 tera 15 (1) 35 2838 0.94 2 2 佐藤 open 10 (2) 35 2993 0.84
この様に綺麗にカラムにスクレイピングした値を入れるのはどの様にすれば良いでしょうか?
またスクレイピング等はrakeファイルを使用しているケースも多く見受けられているので上に書いた様なrakeファイルから保存していく方法も知りたいです。
長くなってしまいましたがよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。