スクレイピングといえば、勝手に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
以上です。
参考になればうれしいです。