ruby スクレイピング テクニック


目次
1、コマンドラインオプションの設定
2、ヘッドレスモードの設定
3、WEBサーバー WEBrickの動かし方

コマンドラインオプションの設定


rubyで便利なコマンドライン用の「optparse」ライブラリを使ってみましょう。
よくターミナルで使う、「-v」や「--version」のようにオプションを取り扱うのに便利です。

[optparse.rb]

#frozen_string_literal: true
require "optparse"  <=#optparseライブラリのrequire

opts = OptionParser.new <=#OptionParserクラスのインスタンス作成
opts.banner = "usage: ruby optparse.rb [options]"  <=#メッセージや使い方などを書いたバナー
opts.program_name = "sumple-opts"  <=#このプログラム名
opts.version = [0.2]  <=#バージョン番号
opts.release = "2022-02-17"  <=#リリース日
opts.on_tail("-v","--version","バージョンを表示する") do  <=#on_tailメソッドはオプションリストの最後に追加するメソッド
    puts opts.ver
    exit 
end

opts.parse!(ARGV)  <=#ARGVの解析


実行してみます。

% ruby optparse.rb

だと何も出力されない

% ruby optparse.rb -h
usage: ruby optparse.rb [options]
-v,--version                        バージョン表示する

-hでヘルプを表示

% ruby optparse.rb -v
sumple-opts 0.2 (2022-02-17)

-vオプションでバージョン表示


ヘッドレスモードの設定

seleniumを使用してブラウザの画面を表示しないで実行する設定

[sumple.rb]

def headlessopts
    options = Selenium::WebDriver::Chrome::Options.new #<=chromeドライバーに渡すオプションのインスタンス作成
    options.headless! #<=ヘッドレスモードを有効にした
    @driver = Selenium::WebDriver.for :chrome,options: options #<=インスタンス作成時オプション追加
end


このオプションを付けることによってコマンド操作のみで動かすことができます。

WEBサーバー WEBrickの動かし方


WEBrickはWebサーバーそのものではなく、Webサーバーを作るためのクラスライブラリです。
Ruby3.0からは標準ライブラリに含まれなくなったので別途インストールが必要となります。

[webrick.rb]

#frozen_string_literal: true

require "webrick" #<=WEBrickライブラリをrequire
config = {
    DocumentRoot: "./", #<=configというハッシュにサーバーの設定を書く
    BindAddress: "127.0.0.1", #<=サーバーのIPアドレスを設定
    Port: 8099 #<=サーバーのポート番号を設定
}
server = WEBrick::HTTPServer.new(config) #<=configで設定したサーバーのインスタンスを生成

trip("INT"){ server.shutdown} #<=コントロールキー + C でプログラムを停止するように設定

server.start #<=サーバーを起動


[ターミナル]

% ruby webrick.rbで


で実行、Webサーバーが起動します。

プログラムをmount_procメソッドをつかって実行

#frozen_string_literal: true

require "webrick"
config = {
    DocumentRoot: "./", 
    BindAddress: "127.0.0.1", 
    Port: 8099 
}
server = WEBrick::HTTPServer.new(config)

server.mount_proc("/test") do |req,res| 
    res.body << '<html lang="ja">'
    res.body << '<head><meta http-equiv="Content-Type" content="text/html; charset="UTF-8" /></head>'
    res.body << "<p>sumple-text</p>"
    res.body << "</html>"
end


procメソッドは、引数に実行したいプログラムのパス名を指定する。