【Ruby】スクレイピングでメタ情報取得したい時

# はじめに
サイト調査をしていて、メタ情報を取得したいくだりがありまして、
メモがてら使用方法を書いていきたいと思います。

# metainspectorというgemを使用
めっちゃ便利なgemがあったので、それを使っています。
その名も「metainspector」！

## 基本的な使いかた
### ①gemをインストールする
```console
$ gem install metainspector
```

### ②requireを記述する
```ruby
require "metainspector"
```

### ③``MetaInspector.new``で、ページ情報を取得
```ruby
# 対象サイトのURLを引数に入れて、情報を取得。
page = MetaInspector.new("https://chiebukuro.yahoo.co.jp/")
```

### ④メソッドを使って該当の値を取り出す
```ruby
puts page.title
    # => Yahoo!知恵袋 - みんなの知恵共有サービス
puts page.description
    # => みんなでつくる便利でうれしい知恵の共有サービス。参加している方がお互いに知恵や知識をQ&Aで共有できるサイトです。
puts page.meta['keywords']
    # => 知恵,知識,質問,回答,悩み,相談,解決,教えて,疑問,意味,方法
```

普通にスクレイピングでmetaを指定すると、``//meta[@name='description']``みたいxpathで指定したりしてます。
それに比べると、記述がすっきりして見やすいし、わかりやすくて好きです。

## 使えるメソッドいろいろ
### テキスト情報
```ruby
puts page.title
    #=>Yahoo!知恵袋 - みんなの知恵共有サービス
puts page.description
    #=>みんなでつくる便利でうれしい知恵の共有サービス。参加している方がお互いに知恵や知識をQ&Aで共有できるサイトです。
```
### リンク情報
```ruby
# リンクを全取得
puts page.links.all
    #=>https://www.yahoo-help.jp/app/noscript
    #=>https://chiebukuro.yahoo.co.jp/?fr=common-navi
    #=>https://chiebukuro.yahoo.co.jp/category
    #=>.....

# 内部リンク（同ドメイン）のみ取得（なんて便利なことを...）
puts page.links.internal
    #=>https://chiebukuro.yahoo.co.jp/?fr=common-navi
    #=>https://chiebukuro.yahoo.co.jp/category
    #=>https://chiebukuro.yahoo.co.jp/ranking/index.php?fr=common-navi
    #=>.....

# 外部リンクのみ取得（なんて便利なことを...）
puts page.links.external
    #=>https://about.yahoo.co.jp/info/mediastatement/
    #=>https://about.yahoo.co.jp/docs/info/terms/chapter1.html#cf3rd
    #=>https://feedback.ms.yahoo.co.jp/voc/knowledge-voc/input
    #=>.....

```

### URL系
```ruby
page = MetaInspector.new("https://qiita.com/kaorioka09jm/items/3eb3dc0f96ac4fc9cf21")

# 取得元ページのURL
puts page.url
    #=> https://qiita.com/kaorioka09jm/items/3eb3dc0f96ac4fc9cf21

# 取得元ページのルートURL
puts page.root_url
    #=> https://qiita.com/

# 取得元ページのドメイン
puts page.host
    #=> qiita.com
```

### HTTPステータスコードなど応答情報

```ruby
puts page.response.status
    #=> 200
puts page.response.headers
    #=> {"date"=>"Tue, 28 Jan 2020 03:10:01 GMT", "p3p"=>"policyref=\"http://privacy.yahoo.co.jp/w3c/p3p_jp.xml\",....
```

### メタタグをまとめて取得
```ruby
# メタタグをごそっともってこれる
puts page.meta_tags
    #=> {"name"=>{"viewport"=>["width=device-width,initial-scale=1,shrink-to-fit=no"], "theme-color"=>["#55c500"], "google-site-verification"=>["XWpkTG32-_C4joZoJ_UsmDUi-zaH-hcrjF6ZC_FoFbk"], "csrf-param"=>["authenticity_token"], "csrf-token"=>["FpwpYjMVcuIWYVH/urWFURhZCSqKXLWi0yKqv1C/rJJtRWjvD37AI7H9Za43RYAZ/puLtUlTLMYJO8B1LyGSOQ=="], "twitter:card"=>["summary_large_image"], "twitter:site"=>["@Qiita"], "twitter:creator"=>["@kaoriokasns"], "keywords"=>["Ruby,アルゴリズム,ライフハック"]}, .....

# 一部だけ持ってくることを指定できる
puts page.meta_tag['name'] ["keywords"]
   #=> Ruby,アルゴリズム,ライフハック
```

[File: README — Documentation for metainspector (5.2.1)](https://www.rubydoc.info/gems/metainspector/5.2.1)より参照

よく使いそうなものだけピックアップしたので、紹介しきれてないです。
上記の参照ページにていろいろ載ってるのでぜひ見てみてください！

## デメリット
あたりまえの話ではありますが、ログイン後のページ等では使用できませんした。
そういった場合は、seleniumというgemを使用しログイン突破してからselenium経由でmeta取得する方法があります。

[seleniumでmetaタグ出力メモ](https://qiita.com/nightyknite/items/cbefa6033f25a1d32ee1)

上記もとても重宝してますが、metainspectorの方が書き方が楽なので、
出来ればmetainspectorで取得したいですけどね。

# おわりに
いかがでしたでしょうか。サイト調査に欠かせないメタチェックですが、
さまざまな理由で既存のサイト回遊ソフトウェアが使用できない時ありますよね。
そういう時にはうまく活用して情報取得したいですね。

# 参考ページ
[File: README — Documentation for metainspector (5.2.1)](https://www.rubydoc.info/gems/metainspector/5.2.1)

[【Ruby on Rails】スクレイピングで簡単にmeta情報を取得するgem metainspector](https://opiyotan.hatenablog.com/entry/ruby-on-rails-metainspector)

## おまけ
[【Ruby】Seleniumで露骨な人間アピール](https://qiita.com/kaorioka09jm/items/5bbd93329acfe5625a45)
>スクレイピングするなら露骨な人間アピールしましょう！