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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

5回答

3078閲覧

「一定時間ごとにスクレイピング」をするのにはサーバーは必要かどうかについて

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/07/23 12:38

編集2017/07/23 15:17

###前提・実現したいこと
今、自分のpcでvagrantとvirtualboxでサーバーを作り、crondを使い、言語はrubyとrailsで、同じニュースサイトを一定時間ごとにスクレイピングをし新着があればそれをビューに表示させるというものを作成しています。

「一定時間ごとにスクレイピング」をする方法としてサーバーでcrondのデーモンを使う方法は知ったのですが、疑問点があります。

vagrantとvirtualboxやレンタルのサーバーなしで自分のpcのruby、railsだけで「一定時間ごとにスクレイピング」をすることはできないのでしょうか?できたとしてもサーバーを使った方が良い理由は何かあるのでしょうか?

ググったり「rubyによるクローラー開発技法」の本を読んだ限りですと、サーバーを使用している例しか?見たことがないのですが、サーバーを使わないといけない?理由があれば教えて欲しいです。
宜しくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
mac

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

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

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

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

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

guest

回答5

0

自分で使う分にはローカルで動かし続けても構いません(もちろん、パソコンをつけっぱなしにする必要がありますが)。

なお、スクレイピングで得たデータをサイト構築に使うとなれば、著作権や利用規約など注意すべき点は多々あります。

投稿2017/07/23 12:55

maisumakun

総合スコア145184

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

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

退会済みユーザー

退会済みユーザー

2017/07/23 13:32

今は自分のpcでvagrantとvirtualboxでサーバーを作ってそこでcrondを使おうと思っているのですが、自分のpcでサーバーを作らなくてrubyとrailsだけでできるかという質問になります。 わかりにくくて申し訳ありません。 vagrantやvirtualboxのようなサーバーは必要なのでしょうか?
guest

0

VMを立てることの直接的なメリットにも結局つながってくるのですが、
●VMを立てて構築する形式のほうが、解説が書きやすい
というのが、そういう解説記事の多くなる最大の理由かと思います。

個人のマシンに直接構築する場合、マシンごとの環境の違いに対応しなければなりません。
どんなポートが空いている? セキュリティソフトは入っている? どんなツールが導入済み? ディレクトリ構成は? 環境変数は?
それぞれのバリエーションについて考慮して「※ただし○○の場合は○○のところを○○と読み替えてください」と但し書きを付けまくるくらいなら、いちからVMを立てて「こういう風にOS環境ごと立ち上げましょう」と書いた方がノイズがない本質的な解説だけに絞って書けます。

これは、実践する人にとってのメリットと表裏一体です。
環境の影響を受けずに構築できるということは逆に言えば環境を汚さないということでもあります。
捨てるのも容易、誰かに渡すのも容易、もちろんクラウドプラットフォームに展開するのも容易。

なるほどいろいろな意味で取り扱いがしやすくなるのはわかった、しかしそれでも、プログラム一本動かすのにVM一本立ち上げるのはもののバランスとしてやはり過剰では? そうなんです、そこで「VMよりもっとずっと軽く動く、VMみたいに独立した環境を自由に作ったり消したり共有できたりする」ツールとして、Dockerが大流行しているわけです。

投稿2017/07/24 01:37

yuba

総合スコア5568

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

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

退会済みユーザー

退会済みユーザー

2017/07/24 07:25

ご回答ありがとうございます。 VMでクローラーを作っている例ばかり目にしていたのはそういう都合上の意味合いもあったのですね。 でも他の方の回答からVMなしでもできることはわかりました。
yuba

2017/07/24 08:31

はい、やればできるのはその通りです。
guest

0

ベストアンサー

両方やっているので、
メリットデメリットを

自宅pcのメリット
○すべての環境が自分の支配下

自宅pcのデメリット
○電気代がかかる(以外と高い)
○うるさい(pc稼働音)
○pc稼働や通信が不安定になることも
○火事のリスク(居ない時に起こると、、、)

レンサバ等のメリット
○以外と安くつく(用途をきちんと絞りこめばコスパがよくなる
○pc稼働や通信環境が安定

デメリット
○環境の制約がつく(サーバー会社の)

個人的には
「用途が絞り込めて、安定稼働を長期に行う予定」ならレンサバ
「研究や学習、遊びに」なら自宅で
特にlinuxサーバーに慣れていないなら、一度苦労して自宅サーバーを立ち上げて、運用開始までやってみる。コレをするといろんな事が学べてレンサバ使うにも楽になりますよ

投稿2017/07/24 00:21

takataka75

総合スコア95

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

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

退会済みユーザー

退会済みユーザー

2017/07/24 07:22

ご回答ありがとうございます。 virtualboxとvagrantでcentos、ruby、rails、mysqlを入れてsequelproでssh接続くらいまでならなんとかできました。 エラーだらけで開発環境を作るまででかなり苦戦したのですが。
takataka75

2017/07/24 10:46

「エラーだらけ」こそ、経験、資産ですよ。 最初はわけのわからないエラーでも、色々やってみることで解決法や解決方法の調べ方見つけ方(特にこっち)がわかってくるものです。 近年はサーバー回りも複雑ですし、パッケージ化されて見えない所も増えています。 ここのような質問サイトで解決方法を聞いても、自分の状況を正確に伝えられなければ、なかなか良い解決方法にたどり着かない事に どこら辺で、どんな風なエラーが出るか、知っていれば、きっと役に立ちますよ
退会済みユーザー

退会済みユーザー

2017/07/26 17:04

ありがとうございます。 引き続き頑張っていこうと思います。
guest

0

crondはLinuxのタスクスケジューラです。
もしWindowsでやりたければWindows用のタスクスケジューラを用意すれば解決でしょ?

ruby、railsだけで

タスクスケジューラ無しならRubyのSleepを使うのが一般的ですかね?
無限ループ内に突っ込んで、30秒なり1分毎に今何時かを計算して1時間置きに実行するとか…

RailsはWebサーバーを立ち上げるフレームワークです。
Webサーバーは何処かのフォルダやDB等に突っ込んでおいた取得済みのニュース一覧を参照する事に専念します。

それとは別にスクレイピングしてニュース一覧を取得しまくるバッチを作って実行しましょう。
バッチにする場合はRubyネイティブでゴリゴリ動かしてもいいのですが、
RailsのModel等を利用出来る仕組みのrunnerと一緒に起動すればはかどりそうですね。
Rails runnerを使ってファイルを実行しました - Qiita

従って立ち上げるプロセスは2つになります。

  • Ruby on RailsによるWebサーバー
  • スクレイピング取得バッチ(Rails runner使用)

投稿2017/07/23 16:27

miyabi-sun

総合スコア21158

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

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

退会済みユーザー

退会済みユーザー

2017/07/26 17:06

なるほど、runnerというやり方もあったのですね。 初めて知りました。参考にさせていただきます。 ご回答ありがとうございました。
guest

0

もし、ご利用のPCがWindowsの場合crondを使う方法だと上手くいかないかもしれません。
(最近のWindowsには詳しくないので確実にそうだとは言い切れないのですが…)

これはWindowsにcrondというツールが無いためです。

crondを利用しない方法であればWindowsを利用している場合でも定期的にプログラムを動作させることは出来ると思います。

ご利用のPCがLinuxやMacであればVagrantで仮想マシンを作ること無くプログラムを動作させることは可能です。


サーバーを利用したほうがいい理由ですが、例えばVagrantのような仮想マシンを利用する場合とレンタルサーバーを利用する場合では理由が異なってきます。

Vagrantを利用する場合であれば、

  • 利用しているOSの制約(Windowsではcrondが無い)を受けることなく開発が出来る

レンタルサーバーを利用する場合であれば、

  • スクレイピングをするためのリソース(CPUやメモリ)を多く割り当てることが出来る

といったメリットが得られるのかなと思います。

投稿2017/07/23 14:43

k-motoyan

総合スコア78

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

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

退会済みユーザー

退会済みユーザー

2017/07/23 15:25

すいません、macで書いています。 仮想マシンのようなサーバーがない状態で書く場合にはどのようにすれば良いのでしょうか? 下記のように書いた場合ビューに対して毎回リクエストがいかないのでDBの中身は変わってもビューが変更されないです。 (controller.rbの内容 ) class ~Controller < ApplicationController require 'open-uri' require 'nokogiri' def index  url = "サイト名"  doc = Nokogiri::HTML(open(url))  aaa = モデル名.find(1)  while true   if aaa.カラム名 != doc.css('cssセレクタ').inner_text    aaa.カラム名 = doc.css('cssセレクタ').inner_text    aaa.save    @aaa = モデル名.find(1).カラム名   end   sleep 10  end end (html.erbのコード) <%= @aaa %>
k-motoyan

2017/07/23 15:38

Macであれば仮想マシンのときと同じように書いて問題ありません。
退会済みユーザー

退会済みユーザー

2017/07/23 15:41

macでそのままターミナルに$ crontabで書けば良いのでしょうか?
退会済みユーザー

退会済みユーザー

2017/07/24 06:34

ご回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問