【公式】データのダウンロード
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に記載していきます。これは私がデータを眺めていて考察したものであり、当然公式が発表しているものではありませんので、使用の際はその点ご留意ください。
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
以上となります。