2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スクレイピングを始めて、詰まった

Last updated at Posted at 2018-07-22

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

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

-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:書き方、書く場所、置く場所、実行の仕方 何を間違っているのか

こうなりますよ〜 とあったものが何一つ出てないので
多分うまくいっていないのはわかった。

サンプルのサンプル的な動きすらも見ることができていないとは
僕の明日はどっちだ。

サンプルのサンプルな動きは確認できたので
僕のあしたはこっちでした。

引き続きいろいろサンプルを弄ってみたい。

コメントありがとうございました。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?