不特定多数のサイトから、情報を取得したい!
なんとなくそんな気分になることもあるかと思います。
今回はスクレイピングでhtml情報を取得し、欲しい要素を抽出するの二段階と考えてみます。
・HTML情報の取得 -- Mechanizeを利用して、スクレイピングできるようにする。
・欲しい要素の抽出 -- headのmetaタグから情報を取得する。
head内は個人の趣味のページだとちゃんとmetaタグが記述されていないこともありますが、
SNSに取り上げられることを視野に入れたある程度規模の大きなサイトであればしっかりと記述してあります。
以下が参考です。↓
OGPとは
https://uideal.net/knowledge/glossary/ogp/
Mechanizeを利用して、スクレイピングできるように。
まずはmechanizeというgemをインストールします。
gemfileに以下を記述
gem 'mechanize'
bundle updateして再起動しましょう。
mechanize(公式)
https://github.com/sparklemotion/mechanize
Rails スクレイピング手法 Mechanizeの使い方
http://qiita.com/shizuma/items/d04facaa732f606f00ff
headのmetaタグから情報を取得する。
まずはmetaタグではないですがページタイトルから。これは簡単です。
agent = Mechanize.new
page = agent.get(params[:article][:url])
title = page.title
#titleを取得
これで取得できます。簡単ですね。
次にサイトの概要ですが。これはmetaタグの中にあります。
metaタグなんて、普段触らないし、どう指定すればいいの?という方もいるかと思います。
中カッコ[]で指定します。
agent = Mechanize.new
page = agent.get(params[:article][:url])
content = page.at('meta[property="og:description"]')
#metaタグのうち、property="og:description"のものを取得
ストロングパラメータ内でまとめて取得できますね。
def create
Article.create(article_params)
end
def article_params
agent = Mechanize.new
page = agent.get(params[:article][:url])
content = page.at('meta[property="og:description"]')[:content]
params.require(:article).permit(:url)params.require(:article).permit(:url).merge(title: page.title,text: content,source: site_name)
end
これでスクレイピングしたものを保存できます。用途に合わせて画像を取得してもいいかも知れません。その場合はいかが参考になるかと思います。
og:image 徹底解説、意味も設定画像スペックもこれでばっちり!2015年5月時点最新版
https://blog.sixapart.jp/2012-06/ogimage.html