LoginSignup
7
3

More than 5 years have passed since last update.

Rubyでも思いのほか簡単にスクレイピングができたのでメモ

Posted at

スクレイピングといえば、勝手にPythonのイメージがありました。
でもRubyでも意外と簡単にスクレイピングできました。

Greenの求人からタイトルとURL、概要を取り出す

例えば、下記のコードを実行すると求人サイトから必要なデータを取ることができます。

green.rb
require 'mechanize'

agent = Mechanize.new
page = agent.get('https://www.green-japan.com/search_key/01?keyword=rails%E3%80%80%E3%83%9D%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB')

title = page.search('.card-info__heading-area__title')
url = page.search('.js-search-result-box.card-info')
company = page.search('.card-info__detail-area__box__title')
summary = page.search('.card-info__detail-area__text')

title.zip(url,company,summary).each do |ti,a,com,su|
 puts ti.inner_text
 puts su.inner_text
 puts "https://www.green-japan.com/" + a.get_attribute(:href)
 puts com.inner_text
end

実行結果はこんな感じ

【Swiftエンジニア】トレたまで紹介された「フェイクビデオ」作成する最先端アプリを開発しています!大幅リニューアルを担当をお願いします。
【概要】
Swiftを用いてXpressionアプリを開発するエンジニアを募集します。
Xpressionアプリの大幅リニューアルを担当していただきます。 もっと見る
https://www.green-japan.com//job/73345
株式会社 EmbodyMe

(中略)

Mechanizeというgemを使用

スクレイピングを行うにあたり、MechanizeというGemを使用しました。
他にもnokogiriなど複数スクレイピングできるライブラリはあるのですが今回はこちらを。
(Javascriptで動くものはスクレイピングできません。)

gemを追加

gem install 'mechanize'

インスタンス生成

agent = Mechanize.new

これはこういうものだと思ってください。

getメゾットでスクレイピングするURLを指定

page = agent.get('https://www.green-japan.com/search_key/01?keyword=rails%E3%80%80%E3%83%9D%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB')

pageはMechanizeのpageオブジェクトです。
参考url
https://seesaawiki.jp/ruby_mechanize/d/Mechanize%3A%3APage

指定したページで取りたい部分を指定

ページで取りたい部分のクラスを指定しています。
search() メソッドを使っています。
この場合はタイトル、求人の詳細url、会社名、概要をこのコードで取り出しています。

title = page.search('.card-info__heading-area__title')
url = page.search('.js-search-result-box.card-info')
company = page.search('.card-info__detail-area__box__title')
summary = page.search('.card-info__detail-area__text')

最後は普通に出力

inner_textメゾットでテキストのみを出力しています。
複数一気に取り出したい場合はzipメゾットがおすすめです、
参考url
https://qiita.com/bSRATulen2N90kL/items/4d6d93e97d8a25a2c90a

title.zip(url,company,summary).each do |ti,a,com,su|
 puts ti.inner_text
 puts su.inner_text
 puts "https://www.green-japan.com/" + a.get_attribute(:href)
 puts com.inner_text
end

以上です。
参考になればうれしいです。

参考URL

7
3
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
7
3