Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: Cannot modify header information - headers already sent by (output started at /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/all-in-one-seo-pack/app/Common/Meta/Robots.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at /home/youjipdkmmwx/web-tweets.com/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/youjipdkmmwx/web-tweets.com/public_html/wp-includes/feed-rss2.php on line 8
python | 知ってほしいWebのあれこれ https://web-tweets.com webに関する様々な情報をお伝えします。 Sun, 14 Aug 2022 05:49:45 +0000 ja hourly 1 PythonのgspreadでGoogleスプレッドシートを操作する方法 https://web-tweets.com/python/python-command-for-spread-sheet/ Sun, 14 Aug 2022 05:49:45 +0000 https://web-tweets.com/?p=548 Pythonで日々勉強していく中で、スプレッドシートを操作出来たら素晴らしいなとおもったりします。今日はgspreadのライブラリを用いてGoogleスプレッドシートをPythonで操作する方法を紹介します。 前提:py...

The post PythonのgspreadでGoogleスプレッドシートを操作する方法 first appeared on 知ってほしいWebのあれこれ.]]>
Pythonで日々勉強していく中で、スプレッドシートを操作出来たら素晴らしいなとおもったりします。今日はgspreadのライブラリを用いてGoogleスプレッドシートをPythonで操作する方法を紹介します。

ウェブさん
ここではGoogleCloudPlatformのAPIキーの取得方法も解説していきますよ!

前提:pythonのAPIに送信する大まかな基礎情報

多くの人は大丈夫かと思いますがpythonのAPIを操作するには大体下記が必要です。

  • メソッド(GET,POST,PUT,DELETE)
  • ヘッダー(データの種類、認証情報など)
  • JSON形式で受信したいデータ情報

API操作に慣れていない人はこれを意識した状態で進むといいと思います。

GoogleスプレッドシートのAPIについて

GoogleCloudPlatformに登録してAPIを取得

GoogleスプレッドシートのAPIを利用するためには、GoogleCloudPlatformに登録が必要です。GoogleCloudPlatformのサービスにある「Google Sheets API」のAPIライブラリを有効にし、認証情報を取得できるサービスアカウントをAPIキーを取得します。

サービスアカウントってなんぞや?

GoogleCloudPlatformのサービスアカウントは、アプリケーション(GoogleSheetsAPIを使って開発するアプリ)からGoogleCloudPlatformにアクセスするために必要な認証とアカウントが紐づいたものです。つまりこれに基づいて認証を行います。

APIに必要な認証キーを取得するまでのステップ

  1. GoogleCloudPlatformに登録
  2. 新しいプロジェクトを作成
    1. プロジェクト名は自由に設定
    2. 場所もいったん自由に指定(よく分からない)
    3. 「作成」をクリックしてプロジェクト作成する
  3. 作成したプロジェクトを表示する
  4. プロジェクト画面を表示したら左上のメニューボタンから「APIとサービス」⇒「有効なAPIとサービス」を選択します
  5. 「有効なAPIとサービス」の画面が表示されたら、画面上の方にある「APIとサービスの有効化」をクリックするGoogleCloudPlatformのAPIとサービスの有効化をクリックする個所
  6. キーワード検索ボックスに「sheet」と検索して「GoogleSheetsAPI」を表示させる。
  7. 表示させたら「GoogleSheetsAPI」をクリックして、「有効にする」をさらにクリックする
  8. 今回は「GoogleDriveAPI」も使用したいので、手順④以降の工程を繰り返し、「GoogleDriveAPI」を有効にするまで行う。※スプレッドシートがドライブの中にあったりするときに必要なので、一応設定しておきましょう。
  9. 「有効なAPIとサービス」のページから「認証情報」⇒「CREATE CREDENTIALS」⇒「サービスアカウント」をクリックする。GoogleCloudPlatformの認証情報の作成
    1. サービスアカウントの「サービスアカウント名」「サービスアカウントID」は自由に設定してください。設定したら「作成して続行」をクリックします。
    2. 次は編集権限の設定を「ロール」の部分で設定します。「編集者」以上であれば問題ないかと思います。「ロール」を設定したら「続行」をクリックします。
    3. 「ユーザーにこのサービス アカウントへのアクセスを許可 (省略可)」は無視して「完了」をクリックして、サービスアカウントの作成を完了させましょう。
  10. サービスアカウントの作成が完了したら「認証情報」のページが表示されますが、先ほど作成したサービスアカウントが作成されたことを確認して、サービスアカウントをクリックしてみましょう。サービスアカウントの認証情報を確認するクリックの箇所
  11. 該当のサービスアカウントが表示されたら「キー」⇒「鍵を追加」⇒「新しい鍵」をクリックします。
  12. 表示されたデータ形式で「JSON」を選択して「作成」をクリックします。認証に必要なAPIキーをJSON形式で作成する
  13. API認証に必要なAPIキーが作成できました。jsonファイルで自分のパソコンにダウンロードされています。スプレッドシートの認証に必要な鍵ファイルなので、大事に保管しましょう。ちなみに、後でファイル名を読み込むときにファイル名が長すぎるので、ダウンロードしたJSONファイルのファイル名を「credentials.json」にしておきます。※この後に表示されるコードのファイル名にいきなり「credentials.json」が出てきてびっくりしないように認識をお願いします。

今回使用するスプレッドシートを用意してください

今回はGoogleスプレッドシートの操作を行うので、Googleスプレッドシートが必要です。一応、こんなスプレッドシートを用意しました。

スプレッドシートの操作練習用のスプレッドシート

同じデータで試したい場合は、「こちら」をクリックしてください。遷移したスプレッドシートは「閲覧」専用シートです。そのため、このスプレッドシートを「コピーを作成」することで、自身が編集権限を持ったスプレッドシートの操作ができます。

作成したスプレッドシートの共有権限にサービスアカウントのメールアドレスを追加する。

自分で編集可能なスプレッドシートを作成したら、次はスプレッドシートの設定によってサービスアカウントのメールアドレスに権限を付与します。

  1. サービスアカウントのメールアドレスをコピーしておくサービスアカウントの認証情報を確認するクリックの箇所
  2. コピーしたサービスアカウントのメールアドレスに、スプレッドシートの権限を付与する
    1. スプレッドシート右上の「共有」からコピーしたサービスアカウントのメールアドレスを入力する
    2. メールアドレスを入力したら、「編集者」⇒「送信」をクリックします。

PythonでGoogleスプレッドシートのAPIを叩く

スプレッドシートの操作でなるべく見ておきたいリファレンス

GoogleCloudPlatformで作成したサービスアカウントの認証に必要なjsonファイルをpythonファイルと同じディレクトリに格納する

先ほど作成したGoogleCloudPlatformのサービスアカウント認証用のjsonファイルをpythonファイルと同じディレクトリに格納します。※読み込みパスを自由に変更できる方は別の場所に入れても大丈夫です。

API認証に必要なJSONファイルをpythonファイルと同じ環境に格納したディレクトリ

私は、jupyternotebookのローカル環境でPythonを実行します。

事前にインストール必要なpythonのライブラリ

今回のAPIリクエストのために、必要なインストールを行います。まだ以下のライブラリをインストールしていない人は、pythonの環境で以下を操作する必要があります。

// 必要なライブラリをインストール
pip install gspread
pip install google-auth

Pythonのコード

# gspreadをインポートします。
import gspread

gspeadをインポートしたら、認証に必要なライブラリなどを設定します。

# 認証に必要なライブラリをインポート 
from google.oauth2.service_account import Credentials 
# 今回使用するAPIの範囲を指定します。 
scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]

次に、サービスアカウントの認証ファイルを読み込みます。

# 認証に必要なサービスアカウントのファイルを読み込み
credentials = Credentials.from_service_account_file(
    'credentials.json',
    scopes=scopes
)
# 認証リクエスト
gc = gspread.authorize(credentials)

ここまでの認証情報の送信を実行してエラーがなければ、おそらく問題なくできているかと思います。

スプレッドシートのデータを取得する

認証を突破した次は、データを取得したいスプレッドシートを指定します。スプレッドシートにはIDが存在します。IDはスプレッドシートURLの「/d/」以降の「/」に囲まれた部分です。以下のURLでは赤文字の部分がスプレッドシートのIDとなります。

https://docs.google.com/spreadsheets/d/1dIxhhcl3qeUD_YB4_qyQFJdCobn5Z0IrSw1g9zidaG8/edit#gid=0

操作を行いたいスプレッドシートを指定するには、このIDを用います。コードではIDを用いて以下のように、スプレッドシートを指定します。

# スプレッドシートのIDを指定する
sht1 = gc.open_by_key('1dIxhhcl3qeUD_YB4_qyQFJdCobn5Z0IrSw1g9zidaG8')
# 対象スプレッドシートのシート名を指定する
worksheet = sht1.worksheet('名簿')

ここで対象のスプレッドシートのワークシートのデータが取得できた状態です。本当に取得できているかは、get_all_values()メソッドを使ってみてみましょう。

# データを見てみる
data = worksheet.get_all_values()
data

問題なければ、以下のデータが表示されます。

取得したワークシートのデータ

このデータをもとに、数字を変更してみましょう。

スプレッドシートのデータを変更してみる

では、塩見さんの年齢を29歳から30歳にしてみましょう。C2のセルの数値を30に変更しているのが以下の操作です。

# 29歳の年齢を30歳に更新する
worksheet.update('C2', '30')

この操作に問題がなければ、スプレッドシートを見てみると数値が更新されていることが分かります。一応、jupter notebookでデータを見てみます。

# 更新したデータを再度読み込んでみてみる
data = worksheet.get_all_values()
data

操作するとこんな表示になります。

数値を更新したスプレッドシート

新しいシートを作成する

新しいスプレッドシートのシートを作成するなら、以下で可能です。以下は「打率」という新しいシート名を作成しています。

# 新しいシート「打率」を作成する
sht1.add_worksheet(title="打率", rows=100, cols=20)

 

まとめ:APIは素晴らしい

これで、Pythonのスクレイピングで取得した毎日のデータをスプレッドシートに記載できたり、色々クリエイティブな作業が出来ると思ったのではないでしょうか。作業の効率化に励みましょう。

The post PythonのgspreadでGoogleスプレッドシートを操作する方法 first appeared on 知ってほしいWebのあれこれ.]]>
pythonでホットペッパーのAPIを叩いてみた https://web-tweets.com/python/hotpepper-api/ Sat, 13 Aug 2022 09:40:27 +0000 https://web-tweets.com/?p=541 ホットペッパーでイカしたお店探しをしてみたくなったので、pythonのAPIを叩いてみました。店舗検索のカスタマイズ性を高めたい場合は、とっても便利です。今回はpythonでホットペッパーのAPIを叩く方法を紹介します。...

The post pythonでホットペッパーのAPIを叩いてみた first appeared on 知ってほしいWebのあれこれ.]]>
ホットペッパーでイカしたお店探しをしてみたくなったので、pythonのAPIを叩いてみました。店舗検索のカスタマイズ性を高めたい場合は、とっても便利です。今回はpythonでホットペッパーのAPIを叩く方法を紹介します。

前提:pythonのAPIに送信する大まかな基礎情報

多くの人は大丈夫かと思いますがpythonのAPIを操作するには大体下記が必要です。

  • メソッド(GET,POST,PUT,DELETE)
  • ヘッダー(データの種類、認証情報など)
  • JSON形式で受信したいデータ情報

API操作に慣れていない人はこれを意識した状態で進むといいと思います。

ホットペッパーのAPIについて

ホットペッパー(リクルート)のAPIリファレンス

ホットペッパーのAPIリファレンスは下記URLから確認できます。

https://webservice.recruit.co.jp/doc/hotpepper/reference.html

APIの認証キーは「新規登録」が必要

ホットペッパーでAPIをたたくために必要な認証キー(APIキー)は、APIリファレンスで「新規登録」が必要です。また、APIキーはメールでしか確認できませんので、忘れないようにしましょう。(新規登録⇒APIリファレンス

メソッド

メソッドはGETメソッドを用いる。

※APIリファレンスに書いてあります。

リクエストURL

APIを叩く時のリクエストURLは下記です。

※変わっているかもしれませんのでAPIリファレンスを確認しましょう。

http://webservice.recruit.co.jp/hotpepper/gourmet/v1/

リクエスト時に設定するパラメータ

リクエストURLやAPIキーと共に、以下のパラメータを指定します。どんなパラメータがリクエストに必要なのかは、公式のAPIリファレンスで確認しましょう。

以下の情報は私が最低限必要な情報を抜粋しています。

  • 必須
    • APIキー
  • どれか最低1つ必要
    • id,name,name_kana,name_any,tel
    • special
    • special_or
    • large_service_area,service_area,large_area,middle_area,small_area
    • keyword
    • lat,lng,range
  • 他のデータ
    • どんな値を指定できるかは、APIリファレンスで確認すること
  • 指定した方が良いパラメータ
    • データ形式の初期値はxmlなので、json形式でデータが欲しいなら、formatは指定すること
    • データ取得件数を指定するならcount(初期値は10※最小1、最大100)

上記のパラメータに基づいて必要なデータを決めていきます。

今回ホットペッパーのAPIで取得するパラメータと認証

必要なパラメータは以下を指定します。

  • パラメータ
    • 最低1つ必要なパラメータの中から、keywordを選択※「恵比寿駅」のキーワードでお店を探す
    • 取得件数を15件にするため、countを設定

パラメータを決めたら、リクエストURLやAPIキーを用いてPythonでリクエストします。

PythonでホットペッパーのAPIを叩く

(その前に)必要なpythonのライブラリ

今回のAPIリクエストのために、requestsのライブラリを使用します。requestsをインストールしていない人は、pythonの環境で以下を操作する必要があります。

// requestsをインストールしていない人
pip install requests

インストールしたら、実際のpythonコードを記述します。

Pythonのコード

//先ほどインストールしたrequestsのライブラリを呼び出し
import requests
次にリクエストURLを変数に格納します。
//リクエストURLを変数に指定する
URL = 'http://webservice.recruit.co.jp/hotpepper/gourmet/v1/'こ
次に取得したAPIキーを変数に格納する。

私のAPIキーは隠しますので、皆さんが取得したAPIキーをxxxxの部分に入れてください。
//APIリファレンスで新規登録することで取得できるAPIキーを入力してください。
API_KEY = 'xxxxx'
変数に格納したAPIキーや他のパラメータをbodyの変数に格納します。
body = {
    'key':API_KEY,
    'keyword':'恵比寿駅',
    'format':'json',
    'count':15
}
  • API_KEYは、前の工程で変数に入れたAPIキーが入ります。
  • keywordは、最低1つ以上必要なパラメータの中からキーワード検索を選択
  • json形式でデータが欲しいので、任意のパラメータformatを指定
  • データが15件欲しいので、countを指定

これらを指定したらリクエストをしてみましょう。

// APIに必要なURLや変数に格納したbodyをもとに、requestsライブラリでリクエスト
// リクエストしたデータをresponseの変数に格納
response = requests.get(URL,body)

そうしたら、JSONデータの中から、15件の店名を表示させましょう。

// 取得したデータからJSONデータを取得
datum = response.json()
// JSONデータの中からお店のデータを取得
stores = datum['results']['shop']
// お店のデータの中から、店名を抜き出して表示させる
for store_name in stores:
    name = store_name['name']
    print(name)

これらを実行すると、以下のような結果が表示されます。
ホットペッパー Webサービス

jupyternotebookでホットペッパーAPIを叩いた結果

まとめ:APIは素晴らしい

APIを提供してくれるのはありがたいですね。ワンランク上のお店探しに必要な環境を提供してくれるホットペッパー(リクルート)さんに感謝です。

 ホットペッパー Webサービス

The post pythonでホットペッパーのAPIを叩いてみた first appeared on 知ってほしいWebのあれこれ.]]>
pythonのseleniumでボタンや画像をクリックする方法 https://web-tweets.com/python/how-to-click-for-python-selenium/ Sat, 23 Jul 2022 10:35:55 +0000 https://web-tweets.com/?p=522 pythonのseleniumで要素をボタンや画像をクリックしたい時に、方法が分からない人もいるかもしれません。そこで、今回はpythonのseleniumでクリック動作を指示する方法について解説していきます。 ここで学...

The post pythonのseleniumでボタンや画像をクリックする方法 first appeared on 知ってほしいWebのあれこれ.]]>
pythonのseleniumで要素をボタンや画像をクリックしたい時に、方法が分からない人もいるかもしれません。そこで、今回はpythonのseleniumでクリック動作を指示する方法について解説していきます。

ここで学べる事:

  • pythonのseleniumで取得した要素(画像やボタンなど)をクリックする方法

seleniumで取得した要素をクリックするためのPythonライブラリ

今回説明するのはseleniumのライブラリでfind_elementを使った要素取得の解説です。画像や要素をクリックするために必要なライブラリは、以下が前提です。

  • seleniumはブラウザ操作を自動化するライブラリです。
  • webdriverは、Chrome()やFirefox()といった操作するブラウザを選択します

seleniumでクリックを行うステップ

seleniumでクリックを行うためには以下の2ステップが必要です。

  1. find_elementで要素を取得
  2. 取得した要素に.click()でクリックを指定

それぞれ解説していきます。

また、要素や画像をクリックするサンプルコードは、「Googleの検索窓をGoogleの画像検索窓にする」ケースを紹介します。

具体的には、以下のGoogle検索窓が表示されている状態で、以下画面キャプチャの右上に表示されている「画像」をクリックすることが本記事の解説のゴールです。

対象の作業ページと対象のクリック要素が決まったらコードの紹介を以降で行っていきます。コードはすべて必要な認識を持ちましょう。

まずは必要なライブラリのインポートとChromeで対象ページを開く

まずはseleniumのインポートとChromeで作業の対象ページ(今回はgoogleのトップページで検索窓を表示)を開きます。以下の対象コードを実行します。

// webdriverでChromeを起動⇒そして該当URLをChromeで開く
from selenium import webdriver
driver = webdriver.Chrome() //chrome起動
driver.get('https://www.google.co.jp/')//chromeでgoogleページを表示

ここまでを実行すると、以下画像のようにgoogleのトップページが表示されます。

この画面が表示されたら、クリックしたい要素にフォーカスします。クリックしたい要素を指定するには次で説明するfind_elementで要素を指定します。次の説明を見てましょう。

find_elementで要素を取得

クリックするためには、クリックする個所を特定する必要があります。クリックしたい箇所の特定はfind_elementを使います。
find_elementのメソッドの中で、今回はfind_element_by_xpathを使ってクリックしたい要素を指定します。現時点のクリックしたい箇所のxpathは以下のようにないます。

// elemの変数を用意して、elemの変数にクリックしたい「画像」のxpathの情報を格納している。
elem = driver.find_element_by_xpath('//*[@id="gb"]/div/div[1]/div/div[2]/a')

xpath以外にも色々あるfind_element
xpathを本記事では紹介しましたがfind_elementは様々なメソッドがあります。他のfind_elementを知りたい場合は下記の記事をチェックしてください。

⇒「pythonのseleniumで要素取得するfind_elementの使い分けと種類と取得方法

また、クリックしたい箇所を特定するには、ブラウザのデベロッパーモードでソースを確認していきます。

xpathの取得方法

デベロッパーモードはWindowsであればF12(Macは Command + Option + I キー)で開くことができます。デベロッパーモードを開いたらキャプチャの下にデベロッパーモードが表示されます。表示されたらデベロッパーモード左上のチェックボタンを押して、クリックしたい要素を押します。
クリックしたい要素を押したら、デベロッパーモードの画面に該当する要素が薄い青色でマスクされた箇所が出てきます。(画像の④)そうしたら右クリックを押して、「Copy」→「Copy XPath」をクリックします。

seleniumでxpathをコピーする4つの手順

ここまでで、クリックしたい要素を指定できている状態です。
クリックした要素を指定できたら、最後にクリックを指定します。

取得した要素に.click()でクリックを指定

// 先ほど指定したクリックしたい要素を格納した変数elemにクリックを指示する
elem.click()

まとめ:seleniumで要素をクリックするコード

ここまでで紹介してきたコードをまとめて記載します。以下を実行することで要素をクリックすることが可能です。

// webdriverでChromeを起動⇒そして該当URLをChromeで開く
from selenium import webdriver
driver = webdriver.Chrome() //chrome起動
driver.get('https://www.google.co.jp/')//chromeでgoogleページを表示

// elemの変数を用意して、elemの変数にクリックしたい「画像」のxpathの情報を格納している。
elem = driver.find_element_by_xpath('//*[@id="gb"]/div/div[1]/div/div[2]/a')

// 先ほど指定したクリックしたい要素を格納した変数elemにクリックを指示する
elem.click()
The post pythonのseleniumでボタンや画像をクリックする方法 first appeared on 知ってほしいWebのあれこれ.]]>
pythonのseleniumで要素取得するfind_elementの使い分けと種類と取得方法 https://web-tweets.com/python/selenium-findelement/ Sat, 09 Jul 2022 08:11:52 +0000 https://web-tweets.com/?p=502 seleniumのスクレイピングで、要素を取得する時に必ず出てくる手法がfind_elementです。そこで今回は、find_elementのメソッドの種類であったり、使い分け方法を解説していきます。 ここで学べる事: ...

The post pythonのseleniumで要素取得するfind_elementの使い分けと種類と取得方法 first appeared on 知ってほしいWebのあれこれ.]]>
seleniumのスクレイピングで、要素を取得する時に必ず出てくる手法がfind_elementです。そこで今回は、find_elementのメソッドの種類であったり、使い分け方法を解説していきます。

ここで学べる事:

  • seleniumのfind_elementメソッドを使った要素取得方法

find_elementを使うためのPythonライブラリ

今回説明するのはseleniumのライブラリでfind_elementを使った要素取得の解説です。そのため、必要なライブラリがありますので、以下ライブラリを使うのが前提です。

  • seleniumはブラウザ操作を自動化するライブラリです。
  • webdriverは、Chrome()やFirefox()といった操作するブラウザを選択します

seleniumを使ったfind_elementの使い分けと種類

(事前知識)単数の要素取得か複数の要素取得かでfind_elementを使い分ける

find_elementで要素を取得する時に、単数の要素か複数の要素取得かどうかでfind_elementを使い分けます。以下の使い分けを行います。

find_elementとfind_elementsの使い分け

find_element
単数の要素取得を使う場合に使います。指定した条件にマッチする要素が複数ある場合は、最初の要素を取得(返す)します。
find_elements
複数の要素を取得する時に使います。複数の要素はリスト形式で返されるので、取得した要素を見たり、操作するときは、リスト形式の処理が必要。
find_elementで取得する時に、1つの要素

seleniumでhtmlファイルのソースコードから、ある要素を取得するには様々なメソッドがあります。まず、以下のメソッドがあることを知りましょう。

find_elementのメソッドの種類

要素取得するfind_elementのメソッドには、要素の指定方法によってメソッドが異なります。主に使われるメソッドは以下のようなものがあります。メソッドと使い方を記載します。

find_elementのメソッド
find_element_by_id
タグ内に記述されたid属性の中身とマッチする要素を探す。
find_element_by_name
タグ内に記述されたname属性の中身とマッチする要素を探す。
find_element_by_xpath
xpath形式でマッチする要素を探す。
find_element_by_tag_name
htmlタグのタグ名でマッチする要素を探す。
find_element_by_class_name
タグ内に記述されたclass属性の中身とマッチする要素を探す。
find_element_by_css_selector
cssセレクタ形式でマッチする要素を探す。

また、複数の要素取得時に使用するfind_elementsは「s」を「element」に追加したメソッドで記述します。複数の要素取得はリスト形式で要素を取得するので、メソッドの説明がほぼ変わらないため、メソッドの種類のみを記載します。

find_elementsのメソッド
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

seleniumを使ったfind_elementの要素取得

では、実際にseleniumを使ったfind_elemntの要素取得を行いましょう。まずはこんなhtmlのソースコードがあったとします。それぞれの要素をfind_elementを使って要素取得していきます。

// このhtmlソースコードの情報を元にfind_elementで情報を取得する
<html>
<body>
<form id="loginForm" class="form-design">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="submit" type="submit" value="login" />
</form>
</body>
<html>

まず、seleniumを使える状態にします。

// webdriverでChromeを起動⇒そして該当URLをChromeで開く
from selenium import webdriver
driver = webdriver.Chrome() //chrome起動
driver.get('https://www.xxx取得したいURLを入れましょうxxx.com/')//chromeでページを表示

上記を実行することでwebdriverでChromeを起動し、該当URLをChromeで表示することができます。この表示したwebdriverに要素取得を行いましょう。先ほど紹介したhtmlコードの記述情報を元にfind_elementで要素を取得する方法を以下で紹介します。

find_element_by_nameで要素を取得する

find_element_by_nameは、タグ内のname属性に書かれた内容と条件マッチした要素を取得します。

//elemの変数にname属性が、usernameに一致した要素を格納する
elem = driver.find_element_by_name('username')

 

find_element_by_xpathで要素を取得する

xpathは、ツリー構造となるxml/html形式から、要素や属性を指定するための構文です。先ほど紹介したfind_element_by_nameとは、要素を指定する構文が異なります。

//htmlソース内の最初のフォームタグを要素取得
elem_form = driver.find_element_by_xpath("//form[1]")

ちなみに、上記の場合は最初のフォームタグを取得しますが、以下のようにid属性を条件に要素を取得することも可能です

//elem_formの変数に、id属性がloginFormにマッチする要素を取得
elem_form = driver.find_element_by_xpath("//form[@id='loginForm']")

xpathは難しい?

他の要素取得方法に比べてxpath形式は難しいと感じる方も多いかと思います。仕組みを理解せずに、簡単に指定してみたい場合は、windowsであればブラウザを開いた状態でF12キーを押し、デベロッパーモード(Chromeの呼称)を開きましょう。デベロッパーモードで取得した要素に対して「右クリック」⇒「コピー」⇒「xpathをコピー」で箇所を特定することが可能です。

find_element_by_tag_nameで要素を取得する

//elem_tagの変数にタグの名前がformのタグ要素を取得する
elem_tag = driver.find_element_by_tag_name("form")

find_element_by_class_nameで要素を取得する

//elem_classの変数にclass属性の値がform_designになっている要素を取得する
elem_class = driver.find_element_by_class_name("form-design")

find_element_by_css_selectorで要素を取得する

//elem_selectorの変数に,formタグのclass属性がform_designになっている要素を取得する
elem_selector = driver.find_element_by_css_selector("form.form-design")

css selectorはデベロッパーモードで調べることが可能

Xpathと同様にselector部分をデベロッパーモードで調べることが可能です。windowsであればブラウザを開いた状態でF12キーを押し、デベロッパーモード(Chromeの呼称)を開きましょう。デベロッパーモードで取得した要素に対して「右クリック」⇒「コピー」⇒「selectorをコピー」で箇所を特定することが可能です。

兄弟要素をfind_element_by_css_selectorで取得する

find_elementで要素を取得する時に、要素を取得する条件で兄弟要素を取得したいと思う時が実務上発生することは想像ができます。その時のために、find_element_by_css_selectorで兄弟要素を指定します。以下のソースコードがあったとします。

//兄弟要素を取得する場合のhtmlソースコードのサンプル
<p class="author">
 xxxxさんは以下の本を出版しております。
</p>
<p class="book">
 <ul>
  <li>タイトル1:ーーー分析入門</li>
  <li>タイトル2:スクレイピング基礎編</li>
  <li>タイトル3:データ解析</li>
  <li>タイトル4:Pandasでデータ分析</li>
 </ul>
</p>
<p class="last">
来年も本を出版予定です。
</p>

上記のタグからclass属性のauthorから見た隣接する直後の兄弟要素は、bookが記述されたclass属性です。その場合、以下のように記述を行います。

// 隣接する直後の兄弟要素を指定する場合は、cssセレクターに「+」を追記して指定する
elem_bro = driver.find_element_by_css_selector("p.book + p")

上記の隣接する直後の兄弟要素だけでなく、すべての後ろの兄弟要素を取得する場合は「~(チルダ)」を使います。

// 隣接する直後の兄弟要素を指定する場合は、cssセレクターに「+」を追記して指定する
elem_bro_all = driver.find_element_by_css_selector("p.book ~ p")

まとめ

selenium自体は他のスクレイピングより、処理が遅いなんて言われますが、遅いことを除けば万能だと思います。seleniumのスクレイピングではfind_elementで要素が取得できることはファーストステップなので、しっかり押さえておきましょう。

The post pythonのseleniumで要素取得するfind_elementの使い分けと種類と取得方法 first appeared on 知ってほしいWebのあれこれ.]]>
python×seleniumで<a>リンクのhrefを取得する方法 https://web-tweets.com/python/pythonxselenium%e3%81%a7a%e3%83%aa%e3%83%b3%e3%82%af%e3%81%aehref%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/ Wed, 06 Jul 2022 14:03:48 +0000 https://web-tweets.com/?p=492 aタグ内のhref属性を取得する時に、[](スクエアブラケット)だったっけ?と、どうしてもseleniumの操作を思い出せない方もいるのではないでしょうか?(自分も)そこで今回はpythonのライブラリseleniumで...

The post python×seleniumでリンクのhrefを取得する方法 first appeared on 知ってほしいWebのあれこれ.]]>
aタグ内のhref属性を取得する時に、[](スクエアブラケット)だったっけ?と、どうしてもseleniumの操作を思い出せない方もいるのではないでしょうか?(自分も)そこで今回はpythonのライブラリseleniumでhref属性の中身(URL)を取得する方法を解説していきます。

ここで学べる事:

  • pythonのライブラリにあるseleniumを使って、aタグ内に記載されたhref属性の中身を取得する

aタグのhref属性を取得するために必要なライブラリ

  • seleniumを使ってブラウザ操作を自動化するライブラリです。
  • webdriverは、Chrome()やFirefox()といった操作するブラウザを選択します

aタグのhref属性を取得するステップ

  1. seleniumのwebdriverをインポートする
  2. Chromeを起動する(FirefoxなどほかのブラウザもOK)
  3. Chromeのwebdriverでhrefを取得したいサイトを開く
  4. aタグが存在する要素を指定する
  5. 指定したaタグからhref属性の中身をget_attribute(‘href’)で取得する

seleniumのwebdriverをインポートする

まずはseleniumをインポートして使えるようにします。

// seleniumをインポートする
from selenium import webdriver

Chromeを起動する(FirefoxなどほかのブラウザもOK)

// Chromeを起動する
browser = webdriver.Chrome()

次にChromeを起動します。

Chromeのwebdriverでhrefを取得したいサイトを開く

// Chromeドライバーでhrefを取得するサイトを開く
browser.get('hrefを取得するページを開く')
hrefを取得するページのURLをgetで取得します。

aタグが存在する要素を指定する

hrefを取得するために、aタグの要素を指定します。例えば以下のhtmlファイルのソースがあると仮定します。

// hrefを取得するページのソースを一部表示させている想定です。
<p class="practice">
 <a href="https://www.xxxxxx.com/article/1653165/">ニュース記事</a>
</p>

上記の場合、find_element_by_class_nameで、aタグを含めたpタグを取得します。その上でaタグを取得します。

// elemの変数にclass属性のpracticeが指定された箇所を取得
elem = find_element_by_class_name('practice')

上記のソースだけであれば、pタグを取得せずとも直接aタグを指定することもできますが、aタグが複数ある場合の実務上も考慮して、class属性を指定した上での方法を選択しています。

指定したaタグからhref属性の中身をget_attribute(‘href’)で取得する

aタグも含めた要素を取得したら、aタグ要素のみを抽出します。aタグを抽出したら、get_attribute(‘href’)でhref属性を取得します。変数に格納したhref属性の中身を確認したいなら、print()で可能です。

// 先ほどの変数elemに格納されたタグの中から,find_element_by_tag_nameを使ってaタグを指定する
// aタグを指定したら、get_attribute('href')を使ってhref属性の中身を取得する
elem_href = elem.find_element_by_tag_name('a').get_attribute('href')
// print()を使って中身を表示する
print(elem_href) //https://www.xxxxxx.com/article/1653165/が表示される

結論:get_attribute()を使ってhref属性の中身が取得できる

つまり、aタグを指定した上で、get_attribute()メソッドを使い、get_attribute(‘href’)を記述すればhref属性を取得することができます。

The post python×seleniumでリンクのhrefを取得する方法 first appeared on 知ってほしいWebのあれこれ.]]>
seleniumでchromedriverがエラー時に試したこと https://web-tweets.com/python/chromedriver-error/ Sun, 19 Jun 2022 08:31:23 +0000 https://web-tweets.com/?p=486 スクレイピングやらでchromedrvierを試したときにエラーが出て、ほんの少しだけ苦労しました。その時に試して、エラーを克服した時に試したことを解説。 前提の環境 私の場合は以下環境で実行しようとしました。 anac...

The post seleniumでchromedriverがエラー時に試したこと first appeared on 知ってほしいWebのあれこれ.]]>
スクレイピングやらでchromedrvierを試したときにエラーが出て、ほんの少しだけ苦労しました。その時に試して、エラーを克服した時に試したことを解説。

前提の環境

私の場合は以下環境で実行しようとしました。

  • anacondaはインストール済み
  • Windows
  • seleniumはインストール済み
  • jupyternotebookでchromedriverを実行したい(ここがゴール)

エラー「WebDriverException: Message: unknown error: cannot find Chrome binary」と出てくる

以下をjupyternotebookで実行すると「WebDriverException: Message: unknown error: cannot find Chrome binary」のエラーが表示された。

from selenium import webdriver
driver = webdriver.Chrome()

エラー改善のために試みたこと

「pip install ~」を試してみた

anacondaで「pip install ~」を試した見たものの、それではchromedriverが起動せず同じエラーが出ました。

結論:chromedriverを直接ダウンロードして、jupyternotebookで実行するpyファイルと同じ階層にアップロードしたら解決した

結構あれやこれやと苦労したのですが、結局は直接chromedriverをダウンロードして、jupyternotebookで実行するpyファイル(pythonファイル)と同じ階層にアップロードしたら問題なくchromedriverが実行できました。

chromedriverを直接ダウンロードできるページ→https://chromedriver.chromium.org/downloads

余談:それでもエラーが出る人のために

私の場合は、バスっとこれでできましたが、いろんなエラーが生じる人のために以下の補足も余談として追加します。

  • ダウンロードしたchromedriverは「C:\Program Files」にアップロードしてもできる?!
    • 私はできませんでしたが、あれやこれやと調べているとchromedriverをC:\Program Filesにアップロードしてもできるという記事も見ました。どうにもならない人は試してもいいかもしれません。
  • chromedriverのバージョンに注意
    • chromedriverは実際に使っている今のchromeのヴァージョンと同じじゃないとエラーが出ます。chromedriverとchromeのバージョンをしっかり確認しましょう。
    • ちなみに数カ月経って、Chromeが最新バージョンにいつの間にかなっていて、chromedriverが昔のままだと、エラーになるので時間が経過する場合は注意が必要ですよ。

 

 

 

ちなみに、

The post seleniumでchromedriverがエラー時に試したこと first appeared on 知ってほしいWebのあれこれ.]]>
pythonのpandasでCSV読み込んだ時のいらない行やカラム名の操作 https://web-tweets.com/python/read_csv/ Thu, 13 Aug 2020 08:28:29 +0000 https://web-tweets.com/?p=368 初歩中の操作ですが、pythonのpandas操作でCSVを読み込んだ時に、いらないヘッダー(行)やカラム名を変更したい時に操作を記録しておきます。 まずはpandasでCSVを読み込む [crayon-69fc91e9...

The post pythonのpandasでCSV読み込んだ時のいらない行やカラム名の操作 first appeared on 知ってほしいWebのあれこれ.]]>
初歩中の操作ですが、pythonのpandas操作でCSVを読み込んだ時に、いらないヘッダー(行)やカラム名を変更したい時に操作を記録しておきます。

ウェブさん
今回私が使用したCSVファイルを完全再現したいなら、日本銀行の為替時系列データを1970年から「データ表示」してダウンロードしてくれれば再現可能です。

まずはpandasでCSVを読み込む

import pandas as pd
pd.read_csv('XXX.csv',encoding'cp932')
読み込みたいcsvのファイル名をXXXの箇所に入れてpythonの操作をしてください。

実行結果はこんな感じ

pandasの実行結果

このデータを見てみると、2行目で扱われているデータが不適切だし、各データカラム名が日本語長くて非常に見辛くなっています。

ウェブさん
上記を鑑みてpandasで「ヘッダーとして使用する行番号の指定」「カラムの名前指定」「インデックスとして使用する列番号の指定」を操作します。

pandasのデータを見やすくするために、下記の操作を実行します。

import pandas as pd
pd.read_csv('exchange.csv',encoding='cp932',header=1,names=['date','USD','rate'],index_col=0,parse_dates=True)

read_csv()関数に指定を加える事で実行結果は下記のように読みやすくなります。

このようにread_csv()関数の指定をしっかりする事で見やすく整形する事ができますとさ。

read_csv()関数で指定できる代表的な引数はこちら

read_csv()関数で指定できる代表的な引数

 

キーワード引数 内容
encoding ファイルのエンコーディングの指定
header ヘッダーとして使用する行番号の指定。Noneを指定すると先頭行から全てデータとしてみなされる。
names カラム(列)の名前の指定
index_col インデックスとして使用する列番号(0からが始まり)
parse_dates Trueにすると、インデックス使用した列に対して日時フォーマットにするように試みられる
na_values デフォルトの値に追加でNaNとみなす文字列のリスト

この操作を知っていれば、わざわざ元のCSVファイルを修正する必要はありません。しっかり覚えておきましょう。

その他のread_csv()関数の扱いを知りたい方は下記を参考にしてください。

The post pythonのpandasでCSV読み込んだ時のいらない行やカラム名の操作 first appeared on 知ってほしいWebのあれこれ.]]>
Pythonのpandasでエクセルデータを読み込む方法 https://web-tweets.com/python/read-xlsx/ Sun, 31 May 2020 05:43:45 +0000 https://web-tweets.com/?p=364 本格的なデータの分析や集計業務に取り掛かろうとしたときに、データを読み込むわけですが読み込むデータの種類は様々です。 今回はPythonのpandasでエクセルデータを読み込む方法を紹介していきます。 前提:pandas...

The post Pythonのpandasでエクセルデータを読み込む方法 first appeared on 知ってほしいWebのあれこれ.]]>
本格的なデータの分析や集計業務に取り掛かろうとしたときに、データを読み込むわけですが読み込むデータの種類は様々です。

今回はPythonのpandasでエクセルデータを読み込む方法を紹介していきます。

前提:pandasはインストールできていること

今回はpandasを使ってエクセルデータを読み込むので、前提としてpandasはインストールされている前提です。pandasをインストールしていない人は、インストールしましょう。

pip install pandas

 

準備:エクセルデータを読み込むには「xlrd」のインストールが必要

では、pandasを使ってエクセルデータを読み込みましょう。ここでポイントですが、csvの読み込みならpandasそのままで読み込みができるのですが、エクセルの場合は追加で「xlrd」をインストールする必要があります。

下記を入力して「xlrd」をインストールしましょう。

pip install xlrd

xlrdをインストールしたら、エクセルデータを読み込む準備は完了です。

実際にエクセルを読み込む場合

実際にpandasからエクセルを読み込むには、下記のように記述します。

import pandas as pd
pd.read_excel('example.xlsx')

エラーが出ている場合

エラーが出ている場合、読み込むデータのディレクトリパスがあっているかどうかを確認しましょう。またcsvファイルを読み込む場合は、read_excelをread_csvに変更します。

The post Pythonのpandasでエクセルデータを読み込む方法 first appeared on 知ってほしいWebのあれこれ.]]>
Pythonのigraphで日本語ば表示されない!そんな時の対処法 https://web-tweets.com/python/igraph-font/ Sat, 16 May 2020 07:31:51 +0000 https://web-tweets.com/?p=357 igraphでネットワーク図を描写したい時に日本語が表示されずに困っている方もいるのではないでしょうか。igraphをようやくインストールして、あともう少し、日本語を表示させることができたら!という人向けの記事です。 な...

The post Pythonのigraphで日本語ば表示されない!そんな時の対処法 first appeared on 知ってほしいWebのあれこれ.]]>
igraphでネットワーク図を描写したい時に日本語が表示されずに困っている方もいるのではないでしょうか。igraphをようやくインストールして、あともう少し、日本語を表示させることができたら!という人向けの記事です。

なぜigraphで日本語が表示されない?

igraphの実行コードを書いて、ネットワーク図を表示させたら日本語が表示されずに、□の文字しか出てこない現象が勃発しました。(上の画像の様に)

「はて、これはどうすれば?」と思いました。

きっと、日本語表示されないのは、igraphの図形描写のフォント設定に、日本語が含まれたフォントがないのだろうと。

日本語を表示する対処法

igraphで日本語を表示するのは、シンプルな話で「graph.py」のフォント設定を変更することです。

graph.pyは、使っているPCなどのローカル環境内の「igraph/drawing/」フォルダ配下にあるはずです。フォルダをチマチマ探すのが面倒な人は「graph.py」をフォルダ検索することで探せるはずです。

「graph.py」のフォント設定箇所は、「DefaultGraphDrawerクラス」にある以下のコードの箇所です。

context.select_font_face(vertex.font, \
                cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)

このコードを以下の様に修正します。

context.select_font_face("Hiragino Sans", cairo.FONT_SLANT_NORMAL, \
            cairo.FONT_WEIGHT_NORMAL)

こうすると、以下の描写になって成功です。

 

The post Pythonのigraphで日本語ば表示されない!そんな時の対処法 first appeared on 知ってほしいWebのあれこれ.]]>
Python3でigraphを使ってネットワーク図を描写するまでにたくさんハマった https://web-tweets.com/python/igraph/ Sat, 16 May 2020 07:08:48 +0000 https://web-tweets.com/?p=353 プログラマーとはいえない自分にとって、Pythonの学習を進めていくのは大変です。 進んでは止まり、また進んでは止まり。できずに停滞してしまうこともあります。Python学習を進めていくにあたり、igraphが使えなくて...

The post Python3でigraphを使ってネットワーク図を描写するまでにたくさんハマった first appeared on 知ってほしいWebのあれこれ.]]>
プログラマーとはいえない自分にとって、Pythonの学習を進めていくのは大変です。

進んでは止まり、また進んでは止まり。できずに停滞してしまうこともあります。Python学習を進めていくにあたり、igraphが使えなくてハマったので、議事がてら共有します。

環境はmacのjupyternotebookでpython3を使っています。windowsの場合は手順が異なる

Pythonでigraphを使うまでの罠を最初に知ろう

Pythonでigraphを使うには、陥りやすい罠があることをまず最初に知っておく必要があります。なぜなら知らぬ間に罠に陥る人も多いからです。

これからの説明は罠です。

繰り返しですが、やってはいけないことなので、肝に銘じてください。

罠①:「py -m pip install igraph」はやっちゃだめ

Pythonでインストールをする基本的な操作は、以下「pip install パッケージ」や「py -m pip install パッケージ」です。この操作が染み付いた人は、igraphをインストールするために「pip install igraph」とあまり考えずにやってしまいますが、これ最悪です。

なぜなら、ネットワーク図を描写するためのigraphのパッケージでは無いからです。

正解は「python-igraph」をインストール

先ほど言った様に、ネットワーク図を描写するためのパッケージは「igraph」ではありません。代わりにインストールするのは、「python-igraph」が正解です。

もし間違った「igraph」をインストールしてしまったら

もし、既に「igraph]をインストールしてしまったらアンイストールしましょう。アンインストールは下記の操作で実行できます。

py -m pip uninstall igraph

罠②:エラー「〜this visualization library has been renamed to ‘jgraph’.〜 」に騙される

DeprecationWarning: To avoid name collision with the igraph project, this visualization library has been renamed to 'jgraph'. Please upgrade when convenient.

pythonを実行した時に表示されるエラーで「jgraph」が出てきたので、「jgraph」をインストールするのも間違いです。

「jgraph」を入れてもネットワーク図の「igraph」は使えません。もし、インストールしてしまったら罠①の時と同じ様に「jgraph」をアンインストールしましょう。

py -m pip uninstall jgraph

 

igraphを使うための正しい手順

Pythonでネットワーク図のigraphを使うにあたっては、まず罠を説明してきました。知らぬ間に罠に入ってしまう人が多いであろうと思ったから、最初に説明しました。

では、ここからは正しい手順です。大まかには以下の通りです。

  • Homebrewでigraphを用意
  • python-igraphをインストール

以下で説明します。

Homebrewでigraphを用意

igraphを使うには、パッケージ管理のhomebrewでigraph本体をインストールする必要があります。以下を順番にmacのターミナルで実行していきます。

$ brew tap brewsci/science
$ brew tap brewsci/bio
$ brew install pkg-config

余談ですが、「$ brew install homebrew/science/igraph」でできると書いているサイトを見かけましたが、私は「Error: homebrew/science was deprecated. This tap is now empty as all its formulae were migrated.」のエラーが出たのでできませんでした。

代わりに実行したのが上の順番なので参考にしてください。

python-igraphをインストール

Homebrewでigraph本体をインストールしたら、「python-igraph」をインストールします。実行コードは問題ないと思いますが、以下の通りです。

$ pip install python-igraph

これで、私はできる様になりました。

出来上がりはこんな感じ

ちなみに今回はまったのでいろんなサイトを参考にさせてもらいました。この記事でも分からない場合は、下記記事を参考にしてください。

「もしかしたらネットワーク図に日本語が出ない!」という方は・・

ここまででigraphを意気揚々とインストールできたあなたに、次の罠が発生する可能性があります。それは、igraphで日本語が出てきない現象です。

合わせて、不安な方は下記記事を参考にしてください。

Pythonのigraphで日本語ば表示されない!そんな時の対処法

2020年5月16日
The post Python3でigraphを使ってネットワーク図を描写するまでにたくさんハマった first appeared on 知ってほしいWebのあれこれ.]]>