search
LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

seleniumを使ってQiitaのview数をカウントする

はじめに

私はつい最近Qiitaを始めました。自分の記事がどのくらい人の目に触れたか、気になるものです。なので毎日のように記事のビュー数を確認していました。

WS000056.JPG

しかし、記事が10本くらいになると、それぞれの記事を開いてビューを確認して…という作業が面倒になってきました。
そこで、seleniumを使ってQiitaのview数をカウントし、CSVファイルに出力するプログラムを作りました。

参考にしたもの

準備

※環境はwindows10

  • seleniumのインストール :pip install selenium
  • webdriver(Chrome)のインストール:こちら
  • webdriverを格納したパスを環境変数に登録

ソース

まずは、ライブラリのインポート

from selenium import webdriver
import time
import datetime
import csv

続いて、Qiitaのマイページを開きます。

browser = webdriver.Chrome()
browser.get('https://qiita.com/<マイページ>')

マイページにはこんな感じで記事が並んでいます。
WS000054.JPG

このリストは'tableList'というクラス名がついているので、まずはクラス名でリストを指定し、その中のリンクの要素('u-link-no-underline')をすべて取得します。
続いて、もう一つブラウザを開きます。このあとで記事のリンクを一つずつ開いていくのですが、マイページを開いた状態でキープしておかないとうまく動かなかったので、記事は別ブラウザで開くことにしました。

# 記事のリストを取得
articles = browser.find_element_by_class_name('tableList').find_elements_by_class_name('u-link-no-underline')
subBrowser = webdriver.Chrome()  

以下はCSVファイルを出力するための準備です。日々の記録をつけていくので、ファイルは追記モード'a'で開きます。実行日付をファイルに書き込むために、変数dateを定義します。

# 出力用ファイルをオープン
f = open('QiitaLog.csv', 'a')
writer = csv.writer(f, lineterminator='\n')
datetime = datetime.date.today() # 日付 
date = datetime.strftime("%Y/%m/%d")

ここからは、記事のリストをループしながら記事を一つずつ開き、ビュー数を取得し、CSVファイルに書き込む処理です。loginという関数はこの後で定義します。

for article in articles:
    count = []
    # リンク、テキストを取得
    url = article.get_attribute('href')
    text = article.text

    # 新しいブラウザで開く
    subBrowser.get(url) 

    # まだログインしていない場合はログイン
    try:
        subBrowser.find_element_by_class_name('st-Header_loginLink')
        login(subBrowser)
    except:
        pass

    # ビュー数をカウント
    time.sleep(2)
    views = subBrowser.find_element_by_class_name('it-Header_pv')
    views_count = int(views.text.replace(' views', ''))

    # 日付、テキスト、リンク、ビュー数を配列に格納
    count.append(date)
    count.append(text)
    count.append(url)
    count.append(views_count)

    # CSVファイルに書き込み
    writer.writerow(count)

ループが終わったらファイルをクローズし、ブラウザも閉じます。

# ファイルクローズ
f.close()    

# ブラウザを閉じる
subBrowser.close()
browser.close()

最後にlogin関数の定義です。新しいブラウザで開いたときはログインしないとview数が見られないので、ログインの処理を作成します。ページ右上のログインボタンを押し、googleのアカウントを使ってログインします。xxxxには自分のメールアドレス、パスワードを設定します。

WS000057.JPG

def login(browser):
    # ログイン
    browser.find_element_by_class_name('st-Header_loginLink').click()

    # googleアカウント
    browser.find_element_by_class_name('btn-google-inverse').click()
    time.sleep(2)
    browser.find_element_by_id('identifierId').send_keys('xxxx@gmail.com')
    browser.find_element_by_class_name('CwaK9').click()    

    time.sleep(2)
    browser.find_element_by_name('password').send_keys('xxxx')
    browser.find_element_by_class_name('CwaK9').click()

実行結果

以下のフォーマットでCSVファイルに出力されます。なお、あらかじめヘッダだけのファイルを作成しておく必要があります。1日1回実行すると、その日のデータが追加されます。
WS000058.JPG

感想

実行速度は人が操作するのとあまり変わりません。(ブラウザを実際にポチポチしているのですから…)まずは、素データを落とせるツールが簡単に作れたのでよかったです。記事ごとのビュー数の増え方など、観察できたら面白いと思います。

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
What you can do with signing up
1