スクレイピングを初めて速攻つまった
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ファイルはコンソールから読み込めない…とか
差し支え無ければ、
どのリファレンスを読め
あるいはどこかのチュートリアルに従えば理解できる。
など教えていただけると助かります……
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/23 04:52
2018/07/23 05:40
2018/07/23 07:49