スクレイピングを初めて速攻つまった
検索して出てきたサンプルプログラムをコピーしたところ
-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|'
なるほど
試したサンプルはこれ
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
Q:これはコンソール上で実行できない…?
→いいえ、 ruby nokogiri.rb としてないからです。
こうしたら動きました。
なぜ試さなかったのか
試さずにこんな記事で恥を晒したのか今となっては不明です。
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
もうひとつrakeファイルなら、というのを目にしたので
これをコンソールで実行してみたところ
/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)
なるほどさっぱりわからん。
rakeのほうがこんなになってしまうのはまた全然別の何かがありそう。
Q:なにか用意できていないものがあるのか
Q:書き方、書く場所、置く場所、実行の仕方 何を間違っているのか
こうなりますよ〜 とあったものが何一つ出てないので
多分うまくいっていないのはわかった。
サンプルのサンプル的な動きすらも見ることができていないとは
僕の明日はどっちだ。
サンプルのサンプルな動きは確認できたので
僕のあしたはこっちでした。
引き続きいろいろサンプルを弄ってみたい。
コメントありがとうございました。