Google Chatからグループのデータをエクスポートする

Google Chatからグループのデータをエクスポートする Python

【公式】データのダウンロード

Google Chatのグループの会話をエクスポートしたかったのですが、公式だと「ダイレクト メッセージと添付ファイル、メンバー情報」しか書き出せないようです。

ダウンロードには以下のデータが含まれます。

・ダイレクト メッセージと添付ファイル、メンバー情報

・ユーザーのプロフィール情報

ヒント: グループの会話は、Chat の履歴の一部として書き出される場合があります。

https://support.google.com/chat/answer/10126829?hl=ja

htmlを抽出

少々強引ですが、Google Chatの画面からデータを取得しようと思います。

データを抽出したいグループの画面を開いてください。

メッセージは一度に全部は読み込まれず、スクロール時に最新のデータから数件ずつ読み込まれるため、Chatのメッセージが表示されなくなるまで手動でスクロールしてください。この作業が一番面倒くさいです。需要があるようであればこの作業もSeleniumなどを利用し、自動化しようと思います。

2022/09/06追記

この記事へのアクセスが結構あるので、自動でスクロール記事を作成しました。

スクロールが完了したら、F12でデベロッパーツールを起動しメッセージを全て囲う要素を選択し、右クリック->「Edit as HTML」し、内容をコピー-> お好みのテキストエディターにペーストしhtmlとして保存してください。

htmlを加工

量が膨大なので、まずは不要な要素を削除します。svgタグは不要そうなので、空文字に一括置換してしまいます。お使いのエディタの一括置換を使用してください。容量が1/5程度に減りました。

<svg.*</svg>

スクレイピング

手動でメッセージ部分のみを抽出するのは無理があるので、PythonのBeautiful Soupを使用しスクレイピングしCSVファイルに出力します。

Python環境がPCに無い方は、Colaboratoryを利用するといいと思います。ブラウザ上で Python を記述、実行できるため、環境構築が不要です。

以下の仕様をpythonに記載していきます。これは私がデータを眺めていて考察したものであり、当然公式が発表しているものではありませんので、使用の際はその点ご留意ください。

  • メッセージ部分はdivタグ
  • メッセージ部分のdivタグにはクラスとして、jsname、jscontroller、jsactionが含まれてる
  • 上記で絞り込むと、メッセージ部分以外も含まれてしまうので、メッセージ部分には含まれていないクラスであるjsmodel、jsdata、roleが存在する要素は対象外する。
  • 本当はdata-format、data-entory-pointクラスも対象外としたかったのですが、Pythonの変数で-(ハイフン)が使用できないため諦めました。
import bs4
import csv  # モジュール"CSV"の呼び出し

# スクレイピング対象のhtmlファイルからsoupを作成
soup = bs4.BeautifulSoup(open('googlechat.html'), 'html.parser')

links = soup.find_all('div', jsname=True, jscontroller=True, jsaction=True, jsmodel=False, role=False, jsdata=False)
#, data-format=False, data-entry-point=False)  

for link in links:  
    text = link.text
    # 改行コードはスペースに変換する
    replaced_text = text.replace('\n', ' ')

    with open('googlechat.csv', 'a', encoding='utf-8') as f:
        writer = csv.writer(f, delimiter=',',  # 区切り文字はカンマ
                    quotechar='"',  # 囲い文字はダブルクォーテーション
                    quoting=csv.QUOTE_NONNUMERIC)  # 全ての非数値フィールドをクオート
        
        row = [replaced_text]
        writer.writerow(row)

ファイルを実行してみましょう。Colaboratory.を使用されている方はセルを実行してください。googlechat.csvが出力されます。

完成したCSVを開くと、空行が残ってしまっているので、CSVファイルを開き手動で一括置換します。

""\n

以上となります。

タイトルとURLをコピーしました