3日目
今回は写真のダウンロード数がグラフ化されるようなものを作ろうと思います。
詳細
写真ACという著作権フリーの画像投稿サイトがあるのですが、そこでは前日にダウンロードされた数が出るのですが、次の日になったら2日前のダウンロード数とかが見れないので1日1回取得してそれをDBに入れて最終的にグラフにするといったことをしようと思います。
https://www.photo-ac.com/
(これでアカウント止められてたりしたら自己責任でお願いします笑)
【技術テーマ】
スクレイピング
言語
- ruby
目標成果物
今日のところは一旦サイトから情報を取得する部分を実装したいと思います。
コードと資料
1. htmlから必要な情報を取得
前回とは違い、今回はログイン周りが関係してくるのでMechanizeを利用します。
source 'https://rubygems.org/'
gem 'nokogiri'
gem 'mechanize'
この状態で
bundle install --path .bundle
なんで--pathでパスを指定してるかって言うと、指定しないとローカルの環境全てに反映されてしまって、後々面倒なことになるからです。
実際の取得してくる部分のコードはこちら
crawler.rb
require 'nokogiri'
require 'mechanize'
agent = Mechanize.new
agent.get("https://www.photo-ac.com")
agent.post("https://www.photo-ac.com/auth/login",{
acc_type: 'cr',
email: 'メールアドレス',
password: 'パスワード',
remember_me: '1'
})
page = agent.get("https://www.photo-ac.com/creator/list/?pl_q=&pl_order=-releasedate&pl_pp=200&pl_disp=all&pl_ntagsec=&pl_tags50over=&pl_chkpsd=")
doc = Nokogiri::HTML.parse(page.body, nil, 'utf-8')
doc.css(".photo-list").each{|div|
p div.css(".sectiondata li")[0].text
p div.css(".sectionimg .preview")[0].text
}
こちらを実行すると
"ID:2875969"
"0"
"ID:2875964"
"0"
"ID:2875028"
"0"
"ID:2875022"
"0"
"ID:2874964"
"0"
"ID:2871884"
"0"
"ID:2871883"
"0"
"ID:2871879"
"0"
"ID:2871873"
"0"
"ID:2871870"
"0"
"ID:2837286"
"0"
"ID:2837285"
"0"
"ID:2837282"
"0"
"ID:2837281"
"0"
"ID:2837280"
"0"
"ID:2837277"
"0"
"ID:2837276"
"0"
"ID:2836745"
"0"
"ID:2836741"
"3"
"ID:2836737"
"1"
"ID:2836735"
"2"
"ID:2836730"
"1"
"ID:2836723"
"0"
"ID:2836718"
"1"
"ID:2746521"
"6"
"ID:2746517"
"11"
"ID:2746513"
"1"
"ID:2746505"
"1"
"ID:2746086"
"1"
"ID:2746084"
"4"
"ID:2746070"
"15"
"ID:2746066"
"16"
"ID:2742664"
"10"
"ID:2742530"
"17"
"ID:2742522"
"6"
"ID:2742517"
"3"
"ID:2741719"
"4"
"ID:2741715"
"16"
"ID:2741708"
"2"
"ID:2741705"
"0"
"ID:2741700"
"0"
"ID:2741699"
"0"
"ID:2741675"
"21"
"ID:2741674"
"2"
"ID:2741653"
"0"
"ID:2741629"
"1"
"ID:2741567"
"0"
"ID:2741381"
"22"
"ID:2741336"
"7"
"ID:2733068"
"14"
"ID:2733060"
"0"
"ID:2733050"
"1"
"ID:2690326"
"2"
"ID:2690291"
"7"
"ID:2690259"
"1"
上記のように画像のIDと、現在のダウンロード数がわかります。
これを1日1回DBに入れて、データを貯めればグラフ化するのは簡単そうですね。