💻

【無料】Railsスクレイピング環境をWeb上に構築する

2023/03/21に公開

概要

とあるサイトの内容を分析したいと思い、初めてスクレイピングをやってみた話です。
ちょうどRailsチュートリアルを完走し、実際に何かを作ってみようとも思っていたのでRailsでやってみました。

対象読者

こんな方にとっては、有益な情報が少しくらいあるのではないでしょうか。

  • スクレイピングという言葉を聞いたことがあって試しにやってみたいと思う方
  • 初めてスクレイピングをやる方
  • Railsチュートリアルを終えて、Railsでとりあえず何かやってみようと思う方

ゴール

この投稿を読み終わる頃には、Railsでスクレイピングを実施できる環境ができあがっています(しかも無料!)

前提

今回の環境構築を初めて行ったとき、私はこういう状態でした。

  • Railsチュートリアルを1周終え、Railsで画面にHello worldを表示したりできる
  • 環境セットアップでつまずいたときに、初めて遭遇するエラーでもある程度は調べて自己解決できる
  • プログラミング言語で思った通りの処理は実装できる、だけど環境周りは普段ほとんど触らない

背景

とあるサイトにある、複数のページにまたがる情報を集めて分析してみたいな~と思うことがありました。
たしかに一つずつ画面を開いてメモして…とやればできなくはないですが非常に手間!
そのため、できれば自動化したいな~というのと、無料だったらいいな~という要望を満たすのがスクレイピングという技術でした。

気を付けること

普段スクレイピングをやっている人にとっては当たり前かもしれませんが、初めての方は要注意です!

https://qiita.com/nezuq/items/c5e827e1827e7cb29011

手順

長々と前提的なお話をしましたが…ここからが具体的な手順となります。
今回は、goormIDEというクラウドIDEを使用します。
 1.Google アカウント作成
 2.goormIDE登録
 3.コンテナ作成
 4.必要なモジュールインストール
 5.実行

1.Google アカウント作成

言わずもがな。作成済みの方はスキップしてください。

2.goormIDE登録

メニューの登録ページから登録します。Googleアカウントで登録できます。

3.コンテナ作成

コンテナ一覧から新しいコンテナを作ります。

項目 設定値
名前、説明 任意の値
地域 ソウル
公開範囲 プライベート
スタック Rails
その他 デフォルト設定

※MySQLインストールなどのオプションがありますが、追加してみても良いかもしれません。

スタックは必ずRailsを!
スタックは必ずRailsを!

4.必要なモジュールインストール

コンテナができたら、コンソール画面を表示しましょう。
コンテナ起動
コンテナを起動しましょう

Rails環境生成
Railsの環境はできました

続いて、Seleniumを導入していきます。

Selenium は、 Webアプリケーションをテストするためのポータブルフレームワークである。 Selenium は、テストスクリプト言語を学ぶ必要なしに、機能テストを作成するための再生ツールを提供する。

このコマンド群を順番に実行していくだけです。
このターミナルに以下のコマンドを貼り付けて実行していく
このターミナルに以下のコマンドを貼り付けて実行していく
同じ内容がgroomIDE公式にもまとめられています。

command
rem install chrome
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list
apt-get update
apt-get install -y google-chrome-stable

rem check the chrome version
google-chrome --version

rem Download the ChromeDriver
wget -N https://chromedriver.storage.googleapis.com/110.0.5481.30/chromedriver_linux64.zip

rem install the chromedriver
unzip chromedriver_linux64.zip
chmod +x chromedriver
mv -f chromedriver /usr/local/share/chromedriver
ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
rm chromedriver_linux64.zip
apt-get update
apt-get install -y libgconf-2-4

一般的?には、テストを自動化するために使用するツールですね。
画面を開いて、どこどこの項目に値を入力して、ボタンを押して…
こういったブラウザ上の操作をコードで定義できるツールですが、スクレイピングにも使えます。

5.実行

さあ、あとはスクレイピングのコードを書いて実行するだけです。
ちなみに、初めて環境構築をした際に筆者はここでハマりました。なぜか実行時にエラーが出てしまう…
みなさんはそうならないことを願いますが。

まずはgemを追加します。

Gemfile
gem 'mechanize'
gem 'selenium-webdriver'

そしてbundle install

command
bundle install

これで準備は完了です!
最後にサンプルをおいておきます。
google searchに設置されているダウンロードリンクのURL取得です。

sample.rb
require 'selenium-webdriver'
require 'net/http'
require 'uri'

# 対象URL
URL="https://www.google.com/search/about/"

# もろもろセットアップ
Selenium::WebDriver::Chrome::Service.driver_path = File.expand_path("/usr/bin/chromedriver")
options = Selenium::WebDriver::Chrome::Options.new
["--disable-dev-shm-usage", "--start-maximized", "--disable-extensions", "--disable-infobars", "--headless", "--disable-gpu", "--no-sandbox", "--window-size=1280x800"].each { |o| options.add_argument(o) }

driver = Selenium::WebDriver.for :chrome, options: options

driver.navigate.to URL
driver.manage.timeouts.implicit_wait = 30
 
sleep(1) # 指定時間(秒)だけ処理を中断する

# CSSセレクタでDOMを指定し、そのhref属性値を取得する
info = puts driver.find_element(:css, 'body > main > div > div.h-c-header__bar > div.h-c-header__cta > ul > li > a.h-c-header__cta-li-link.h-c-header__cta-li-link--primary.deeplink.deeplink--desktop').attribute('href')

puts info


driver.quit
command
ruby sample.rb

もろもろセットアップというところが実は重要なのです。
ここの指定を誤ると、実行時にエラーが発生してしまうのです。
railsのこういったクラウドIDE環境特有なのかはわかりませんが、まとまった情報がネットには落ちていませんでした。。。

まとめ

今回はクラウドIDEにおける、railsスクレイピング環境構築方法についてご紹介しました。
Seleniumだと、ロギングや画面遷移、JavaScriptで実行できるようなDOM操作などは実行できるので
この記事をきっかけにいろいろと試していただけたらと思います!

Discussion