こんにちは、コロンビア人の学生エンジニアgaruです。
スクレイピング(クローリング)は慣れたらマッハで作れるようになるみたいです。
今回はそんなマッハで構築の技(curl to ruby)をやってみましょう。

curlって?

curlとは何かという人もいると思います。
公式サイトを確認してみましょう。  

What's curl used for?
curl is used in command lines or scripts to transfer data. It is also used in cars, television sets, routers, printers, audio equipment, mobile phones, tablets, settop boxes, media players and is the internet transfer backbone for thousands of software applications affecting billions of humans daily.
出典:https://curl.haxx.se/

意訳すると「curlはコマンドラインでデータ送信の出来るツールであり、ありとあらゆるデバイスに使われている」という事が書いてあります。
つまり、URLを用いてデータの送信や受信が出来るということです。

以下のような利用例が考えられます。

  • 簡単なAPIのテストを行う
  • パソコンのネットワークが切れていないか、curlのレスポンスを確認してみる
  • curl https://ifconfig.ioでパソコンのIPアドレスを確認する
  • スクレイピング(クローリング)、RPA(業務自動化)を構築する

もっと利用方法はあると思います。
curlはとてもシンプルに通信できるため、とりあえず使ってみるような場面で使うためエンジニアは手のように足のように使えなければいけません。

とにかく今回は習うより慣れろ、実際にやってみましょう。

curlでデータの送信と受信

Macユーザーはターミナルを立ちあげて、以下のコマンドを実行してください。

# データの受信のみ
$ curl https://example.com
# HTMLが返却されます。

# データを送信して、その値に応じたデータを受信する
$ curl -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://example.com
# HTMLが返却されます。

今回はたまたま同じHTMLが返却されますが本来の用途は違うので、気をつけましょう。

では、いよいよマッハでクローラーを構築します。

マッハでクローラーを構築する

https://example.com/にGoogle Chromeでアクセスして、検証モードを開きます。
このような画面になります。
chrome_develop ここで、curlをコピーします。
これはファイルの受信をする際に使ったステータスをcurl形式で取得できます。
get_curl curl-to-rubyにアクセスして、コピーしたcurlをペーストします。
以下のように出力されたと思います。
最後のコメントアウトを標準出力に変えましょう。

require 'net/http'
require 'uri'

uri = URI.parse("http://blob:https://example.com/6dcd6002-7d48-4621-bf0b-11a80fdddf98")
request = Net::HTTP::Get.new(uri)
request["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

puts response.code
puts response.body

これで完成!(ここまで約3.06秒)
このファイルを保存して、そのまま実行するだけでcurlで取得した結果と同じHTMLを取得できます。
今回はデータを送信しないGetリクエストですが、データを送信するPOSTリクエストも同様に簡単に変換できるので是非活用しましょう!!

curl to 〇〇を使う時の注意点

実はruby以外にも、curl to pythonやcurl to goなど、探せば色々なサービスが出てくると思います。
使うのはとても簡単ですが、検証モードで取得したcurlの中身には何が書いてあるかわかりません(´・_・`)
例えば

  • Googleアカウントのcookie情報
  • AWSのログインIDとパスワード

こういった情報がcurlの中身に書かれている可能性がないとは言い切れません。
必ず、curlの中身を確認するようにしましょう。
また、この記事で紹介しているcurl to rubyのサイトは安全ですが、変換の際にページをロードするような場合はバックグランドでcurlの内容を保存している可能性もあります。
使用には十分気をつけましょう。

注意点まとめ

  • ログイン情報の流出に気をつけよう
  • ページをロードするサイトは使わないようにしよう