11
26

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.

【Ruby on Rails】 スクレイピング HTML データ抜き出し

Last updated at Posted at 2019-04-26

#スクレイピングとは
他のウェブサイト上からある特定のデータを抜き出す処理です。
###使うための準備

####●Railsで、Gemをインストールする場合

Gemfile
gem 'mechanize'
ターミナル
$ bundle install

これで、gemのインストールが完了しました。
####●rubyファイルでクラスを使う場合
.rbファイルの一番上に追記すると使えるようになります。

〇〇.rb
require 'mechanize'

###Mechanizeクラスのインスタンスを生成する
スクレイピングを使うには、まず「Mechanizeクラスのインスタンス」を生成します。
インスタンスを生成するにはnewメソッドを使うでした。

〇〇.rb
任意の変数 = Mechanize.new

これでインスタンスが生成できました。
###WEBサイトのHTMLを取得する(get)
先程、生成したインスタンスに取得したいWEBサイトの情報を抜き出すためにgetメソッドを使います。引数にURLを渡しましょう。

〇〇.rb
require 'mechanize'
任意の変数 = Mechanize.new
任意の変数2 = 任意の変数.get("取得したいWEBサイトのURL")

###指定したHTML要素の内容を検索する
今回は、spanタグを内容を取得します。h1やpなどいろいろ試してみると理解が深まります。

〇〇.rb
require 'mechanize'
任意の変数 = Mechanize.new
任意の変数2 = 任意の変数.get("取得したいWEBサイトのURL")
任意の変数3 = 任意の変数2.search('span')
puts 任意の変数3

さいごに任意の変数3を呼び出すと取得したいURLのspanタグの要素が全て取得できているのがわかります。
要素の中の要素を指定した場合は下記のように書きます。h1の中のspanという意味になりますね。

任意の変数3 = 任意の変数2.search('h1 span')

####要素からテキストのみを抜き出す(inner_text)
では、前回取り出したspan要素からテキストのみを取得してみましょう。
今回は、eachメソッドを使ってspan要素のテキストを全て表示させます。

〇〇.rb
require 'mechanize'
任意の変数 = Mechanize.new
任意の変数2 = 任意の変数.get("取得したいWEBサイトのURL")
任意の変数3 = 任意の変数2.search('span')
任意の変数3.each do |変数3|
  puts 変数3.inner_text
end

では、ターミナルで出力してみましょう。

ターミナル
$ ruby 〇〇.rb

これで、指定したURLのspan要素のテキストが全て表示されました。
####属性の値を抜き出す(get_attribute)
今回は、a要素のからhrefの値を取得して呼び出します。

〇〇.rb
require 'mechanize'
任意の変数 = Mechanize.new
任意の変数2 = 任意の変数.get("取得したいWEBサイトのURL")
任意の変数3 = 任意の変数2.search('a')
任意の変数3.each do |変数3|
  puts 任意の変数3.get_attribute('href')
end
11
26
0

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
11
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?