どうやら口コミが消されている事件があるようなので
見てみることにしました。
解説動画はこちら
見てみることにしました。
解説動画はこちら
ジャングリア沖縄
2025年7月25日に開業したテーマパーク
「大自然没入型」を掲げ、恐竜や絶景などを
テーマにしたアトラクションや温泉施設を備える
テーマにしたアトラクションや温泉施設を備える
口コミが香ばしいので、全部見てみました。
HTMLをBeautiful Soup で解析する
クラス名の部分は変更される可能性があるので
データが取れない場合は、変更してみてください。
(HTMLファイル内のclassの部分の文字列に変更する)
データフレームに変換する
星の数などを可視化する
データができたら可視化していきましょう
要ライブラリ

散布図

日毎の星の数
ワードクラウドでコメントを可視化する
フォントパスについては環境ごとに変更が必要です
下記はmacの例

終わりに
はじめにデータを取得した際は
63件ありました。
でも動画を撮る際には
58件に減っていました。
ここから言えることとしては
Google口コミが消されています!!!
Googleさん
口コミは重要なので消さないでください!!!
消した口コミ
元に戻してください
消費者が正しい判断ができるように
口コミは正しくあるべきです
良いものは良い
悪いものは悪い
悪いものが良いように操作されたり
その逆も絶対にあってはならんことです。
また、口コミを鵜呑みにせず
実際に見てみることも重要だったりします。
まあ、今回の件は
確実に消されているので
正しい口コミとして
判断できない状態になっています。
今後の展開が楽しみですね!!!
それでは。
口コミデータを取得する方法
(Google Chromeの場合)
Google口コミから、ジャングリアの口コミを開く
最下段までスクロールする
その状態で「右クリックから検証」で検証ツールを開く
HTMLのソースをクリックして
「Copy outerHTML」を実行
「Copy outerHTML」を実行
テキストエディターに貼り付けて
htmlファイルとして保存する
htmlファイルとして保存する
HTMLをBeautiful Soup で解析する
クラス名の部分は変更される可能性があるので
データが取れない場合は、変更してみてください。
(HTMLファイル内のclassの部分の文字列に変更する)
from bs4 import BeautifulSoup
# ファイル名は適宜変更する
with open("google.html") as _f:
html_data = _f.read()
soup = BeautifulSoup(html_data, "html.parser")
all_div = soup.find("div",class_="aSzfg")
divs = all_div.find_all("div",class_="bwb7ce")
data = []
for div in divs:
date_tag = div.find("span",class_="y3Ibjb")
date = date_tag.text.replace("最終編集: ","")
name_tag = div.find("div",class_="Vpc5Fe")
name = name_tag.text
role_tag = div.find("div",class_="GSM50")
roles = role_tag.text.split("·")
role = roles[0] if len(roles)==3 else ""
num = roles[1].replace(" 件のクチコミ","") if len(roles)==3 else roles[0].replace(" 件のクチコミ","")
photo = roles[2].replace(" 枚の写真","") if len(roles)>2 else ("" if len(roles)==1 else roles[1].replace(" 枚の写真",""))
rating_tag = div.find("div",class_="dHX2k")
rating = rating_tag.get("aria-label").replace("5 点中 ","").replace(" 点の評価","")
comment_tag = div.find("div",class_="OA1nbd")
comment = comment_tag.text.replace(" …もっと見る","") if comment_tag is not None else ""
tmp = [date,name,role,num,photo,rating,comment]
data.append(tmp)
データフレームに変換する
import pandas as pd
import re
# 日付変換用関数
def convert_to_days(value):
if "週間前" in value:
weeks = int(re.search(r"(\d+)", value).group(1))
return -weeks * 7
elif "日前" in value:
days = int(re.search(r"(\d+)", value).group(1))
return -days
elif "時間前" in value:
return -1
else:
return 0
columns = ["日付", "名前", "職業", "口コミ数", "写真の数", "星の数", "コメント"]
df = pd.DataFrame(data,columns = columns)
df["口コミ数"] = df["口コミ数"].replace("", 0).astype(int)
df["写真の数"] = df["写真の数"].replace("", 0).astype(int)
df["星の数"] = df["星の数"].replace("", 0).astype(float)
df["日前"] = df["日付"].apply(convert_to_days)
星の数などを可視化する
データができたら可視化していきましょう
要ライブラリ
pip install japanize_matplotlib pip install janome pip install wordcloud
星の数ごとのカウント
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib
# ================
# 1. 星の数のヒストグラム
# ================
plt.figure(figsize=(6, 4))
sns.histplot(df["星の数"], bins=10, kde=True, color="purple")
plt.title("星の数のヒストグラム")
plt.xlabel("星の数")
plt.ylabel("件数")
plt.show()

散布図
# ================
# 2. 散布図 (2種類)
# ================
plt.figure(figsize=(12, 5))
# (1) 口コミ数 vs 星の数
plt.subplot(1, 3, 1)
sns.scatterplot(x="口コミ数", y="星の数", data=df, color="blue")
plt.title("口コミ数 vs 星の数")
# (2) 写真の数 vs 星の数
plt.subplot(1, 3, 2)
sns.scatterplot(x="写真の数", y="星の数", data=df, color="green")
plt.title("写真の数 vs 星の数")
# (3) X日前 vs 星の数
plt.subplot(1, 3, 3)
sns.scatterplot(x="日前", y="星の数", data=df, color="red")
plt.title("日前 vs 星の数")
plt.tight_layout()
plt.show()

日毎の星の数
# ▼ 棒グラフ作成
plt.figure(figsize=(12, 6))
sns.countplot(data=df, x="日前", hue="星の数", palette="viridis")
# ▼ 軸・タイトルの設定
plt.title("日前ごとの星の数カウント", fontsize=16)
plt.xlabel("日前", fontsize=14)
plt.ylabel("カウント数", fontsize=14)
plt.xticks(rotation=45)
plt.legend(title="星の数")
plt.tight_layout()
plt.show()

ワードクラウドでコメントを可視化する
フォントパスについては環境ごとに変更が必要です
下記はmacの例
import pandas as pd
from janome.tokenizer import Tokenizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# Janome で形態素解析
tokenizer = Tokenizer()
def extract_nouns(text):
"""文章から名詞を抽出してリストで返す"""
words = []
for token in tokenizer.tokenize(text):
part = token.part_of_speech.split(',')[0]
if part == "名詞":
words.append(token.surface)
return words
# 全コメントから名詞を抽出
all_words = []
for comment in df["コメント"]:
all_words.extend(extract_nouns(comment))
text_for_wc = " ".join(all_words)
# WordCloud 作成
wc = WordCloud(
font_path="/System/Library/Fonts/ヒラギノ角ゴシック W6.ttc",
width=800, height=600,
background_color="white",
colormap="viridis"
).generate(text_for_wc)
# 画像表示
plt.figure(figsize=(10, 8))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.tight_layout()
plt.show()

はじめにデータを取得した際は
63件ありました。
でも動画を撮る際には
58件に減っていました。
ここから言えることとしては
Google口コミが消されています!!!
Googleさん
口コミは重要なので消さないでください!!!
消した口コミ
元に戻してください
消費者が正しい判断ができるように
口コミは正しくあるべきです
良いものは良い
悪いものは悪い
悪いものが良いように操作されたり
その逆も絶対にあってはならんことです。
また、口コミを鵜呑みにせず
実際に見てみることも重要だったりします。
まあ、今回の件は
確実に消されているので
正しい口コミとして
判断できない状態になっています。
今後の展開が楽しみですね!!!
それでは。
