PythonでサーチコンソールAPIを使って検索データをCSVとしてダウンロードする

SEO分析に不可欠なGoogleサーチコンソール。SEOのために検索パフォーマンスデータをCSVで保存して自分でごにょごにょいじれるように、PythonからGoogleのAPIを叩いてみる。

前提

  • Python 3系
  • Google Search Console API の認証は済んでいる状態

Pythonのソースコード


# -*- coding: utf-8 -*-

import argparse
import sys
from googleapiclient import sample_tools

import pandas as pd

argparser = argparse.ArgumentParser(add_help=False)

argparser.add_argument('property_uri', type=str,
    help=('Site or app URI to query data for (including '
    'trailing slash).'))
argparser.add_argument('start_date', type=str,
    help=('Start date of the requested date range in '
    'YYYY-MM-DD format.'))
argparser.add_argument('end_date', type=str,
    help=('End date of the requested date range in '
    'YYYY-MM-DD format.'))

def main(argv):
  service, flags = sample_tools.init(
            argv, 'webmasters', 'v3', __doc__, __file__, parents=[argparser],
            scope='https://www.googleapis.com/auth/webmasters.readonly')

  request = {
            'startDate': flags.start_date,
            'endDate': flags.end_date,
            'dimensions': ['date','device'],
  }
  response = execute_request(service, flags.property_uri, request)
  print_table(response, 'searchanalytics')

def execute_request(service, property_uri, request):
  return service.searchanalytics().query(
          siteUrl=property_uri, body=request).execute()

def print_table(response, title):
  if 'rows' not in response:
    print('Empty response')
    return

  rows = response['rows']
  tbl = []
  for row in rows:
    v_date = row['keys'][0] #dimensionsに2つ以上指定するとlist型でデータが返るので順に出力
    v_device = row['keys'][1]
    v_imp = int(row['clicks'])
    v_clicks = int(row['impressions'])
    v_ctr = str(round((row['ctr'] * 100),1)) + "%" #クリック率を見やすくする
    v_pos = str(round(row['position'],1))
    tbl.append([v_date, v_device, v_imp, v_clicks, v_ctr, v_pos])
  tbl_csv = pd.DataFrame(
    tbl,
    columns = ['Date', 'Device', 'Click', 'Impression', 'CTR', 'Position'])
  tbl_csv.to_csv(title + '.csv')

if __name__ == '__main__':
  main(sys.argv)

上記を`sc.py`という名前で保存する。

コマンドラインから実行

$ python3 sc.py 'https://xxbxxqxx.com' '2019-06-01' '2019-06-30'

引数を3つ取っている。
1) Google Search Consoleに登録済みで、検索パフォーマンスを取得したいウェブサイトのURL。
2) データを取得する開始日。フォーマットは’YYYY-MM-DD`。
2) データを取得する終了日。フォーマットは’YYYY-MM-DD`。

上記のコマンドを実行すると、同じディレクトリにCSVファイルが生成されているはず。

中を開いてみると、日付、デバイス、クリック数、表示回数、CTR、平均順位が出力されている。成功!

search analytics by python


Python初心者ゆえ、見苦しい箇所があるかもだけど、Googleがすでに用意しているサンプルコードが過不足なく良い感じなので、Pythonの基礎がわかっていれば「クリック数順ページTOP30」とか「どの国でCTRが悪い」等は簡単に出せる。

これを近いうちに自動でBig Queryあたりに持っていき、Data studioと連携までできるようになれば捗りそうだな〜。

Written by Ryo Konishi