LoginSignup
0
0

More than 3 years have passed since last update.

写真ACのダウンロード数をグラフ化したい【スクレイピング実装編】 〜1日10行コーディング〜

Posted at

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に入れて、データを貯めればグラフ化するのは簡単そうですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0