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

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

ただいまの
回答率

90.52%

  • Ruby

    7634questions

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

  • Linux

    3761questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Ruby on Rails 5

    1738questions

スクレイピングのサンプルコードを実行するにあたって

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 186

NegiCO3

score 1

 スクレイピングを初めて速攻つまった

1:スクレイピングのサンプルプログラムを実行してみる
2:サンプルプログラムの該当箇所を書き換えて自分の欲しいものに変更してみる

の1で既にわからない状態になってしまいました。

検索して出てきたサンプルプログラムをコピーしたところ

コンソール
-bash: require: コマンドが見つかりません
-bash: require: コマンドが見つかりません
-bash: url: コマンドが見つかりません
-bash: charset: コマンドが見つかりません
-bash: app/jobs/nokogiri.rb: line 8: 期待してない token `(' のあたりにシンタックスエラー
-bash: app/jobs/nokogiri.rb: line 8: `html = open(url) do |f|'

なるほど

追記
なんてことなく ruby nokogiri.rb
ってしたら動きました。

今となってはなぜ頭に ruby をつけてみなかったのか謎で仕方ないですが
とりあえず動きました。

rails new だの
ruby -v だのやっているのになぜ……

試したサンプルはこれ

nokogiri.rb

require 'nokogiri'
require 'open-uri'

url = 'https://qiita.com/search?q=ruby'

charset = nil

html = open(url) do |f|
    charset = f.charset
    f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath('//h1[@class="searchResult_itemTitle"]').each do |node|
  p node.css('a').inner_text
end


該当ファイルは

もうひとつrakeファイルなら、というのを目にしたので

scrape.rake

namespace :scrape do
  require 'open-uri'
  require 'nokogiri'

  # スクレイピング先のURL
  url = 'http://matome.naver.jp/tech'

  charset = nil
  html = open(url) do |f|
    charset = f.charset # 文字種別を取得
    f.read # htmlを読み込んで変数htmlに渡す
  end

  # htmlをパース(解析)してオブジェクトを作成
  doc = Nokogiri::HTML.parse(html, nil, charset)

  doc.xpath('//li[@class="mdTopMTMList01Item"]').each do |node|
    # tilte
    p node.css('h3').inner_text

    # 記事のサムネイル画像
    p node.css('img').attribute('src').value

    # 記事のサムネイル画像
    p node.css('a').attribute('href').value
  end

end
これをコンソールで実行してみたところ

/home/vagrant/blog/vendor/bandle/gems/rake-12.3.1/lib/rake/file_utils.rb:10: warning: already initialized constant FileUtils::RUBY
/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/file_utils.rb:10: warning: previous definition of RUBY was here
/home/vagrant/blog/vendor/bandle/gems/rake-12.3.1/lib/rake/file_utils.rb:109: warning: already initialized constant FileUtils::LN_SUPPORTED
/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/file_utils.rb:109: warning: previous definition of LN_SUPPORTED was here
/home/vagrant/blog/vendor/bandle/gems/rake-12.3.1/lib/rake/file_utils_ext.rb:17: warning: already initialized constant Rake::FileUtilsExt::DEFAULT
/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-12.3.1/lib/rake/file_utils_ext.rb:17: warning: previous definition of DEFAULT was here
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/vagrant/blog/vendor/bandle/gems/rake-12.3.1/lib/rake/file_list.rb:44: warning: already initialized constant Rake::FileList::ARRAY_METHODS

中略

/home/vagrant/blog/vendor/bandle/gems/railties-5.1.6/lib/rails/engine.rb:648:in `each'
/home/vagrant/blog/vendor/bandle/gems/railties-5.1.6/lib/rails/engine.rb:648:in `run_tasks_blocks'
/home/vagrant/blog/vendor/bandle/gems/railties-5.1.6/lib/rails/application.rb:440:in `run_tasks_blocks'
/home/vagrant/blog/vendor/bandle/gems/railties-5.1.6/lib/rails/engine.rb:457:in `load_tasks'
/home/vagrant/blog/Rakefile:6:in `<top (required)>'
(See full trace by running task with --trace)

なるほどさっぱりわからん。。。

追記
こっちはさっぱりわからん。

Q1:なにか用意できていないものがある?
open-uriが読み込めなさそうな気配があるが
rubyの標準ライブラリでは……?別途gemでのインストールが必要ですか?
■ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]

Q2:書き方、書く場所、置く場所、実行の仕方などに間違いがある
rails new で作成したフォルダの適当な場所に配置して
コンソールから読み込んでいるけど、
rbファイルの配置場所って何か決まりがあるんでしょうか?
rakeファイルはおそらくlib/tasks内で大丈夫かと思うのですが。

あとはrbファイルはコンソールから読み込めない…とか

差し支え無ければ、
どのリファレンスを読め
あるいはどこかのチュートリアルに従えば理解できる。
など教えていただけると助かります……

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

今までに、Rubyのプログラムを実行したことが一度も無いのですよね?
個々に説明してもしょうが無いと思うので、まずはRubyの入門書を1冊読むのが良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/23 13:52

    ありがとうございます。
    これについてうまくいかない原因は、rubyプログラムの実行経験が無いから。ということでしょうか
    個別に説明しても、ということは本文には複数の知識や経験不足がある、と判断されたかと思いますが、初めの解決手段としての入門書は たのしいRubyでいいのでしょうか?

    bashで実行しており、rubyで実行していない、という情報は得られたので、それについても調べてみようと思います。

    何について分かっていないのかを知りたいので、可能であればキーワードなどご教示いただけると助かります。

    キャンセル

  • 2018/07/23 14:40

    「Rubyスクリプトを実行するコマンドはrubyである」ということが分かっていない人が、いったい何を分かっているのだろうか?と思った次第です。
    「たのしいRuby」は悪くないと思います。「パーフェクトRuby」を薦める人もいます。
    現状スキルによって、適した本が違うので、大きめの本屋で実際に本の中身をぱらぱら見て選ぶんだ方が良いです。

    キャンセル

  • 2018/07/23 16:49

    スキルについてはまっさらに程近い状態のため、まずは入門書籍などを購入してみます。

    そんなこと、と思われるかもしれませんが
    まずは、.rbファイルはスクリプトであること
    スクリプトファイルの実行は ruby コマンドが必要であることを理解しました。

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7634questions

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

  • Linux

    3761questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Ruby on Rails 5

    1738questions