質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

465閲覧

rails、nokogiriでスクレイピングした値をDBに保存する方法について

widget11

総合スコア221

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/06/24 14:49

最近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ファイルから保存していく方法も知りたいです。
長くなってしまいましたがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

rakeファイルで

feed = Model.new(:name => name) feed.save

のようにnewメソッドの引数にハッシュで値が入った変数をカラム名で定義し、
saveメソッドを行うことでDBに値が入っていました。

投稿2018/06/27 13:56

widget11

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問