スクレイピングでPeople in the boxの歌詞を調べる

# はじめに
「People in the Box」というバンドは、非常に高い演奏技術、ユニークな歌詞、そして完成度の高いPVで知られる、3ピースバンドである。
https://peopleinthebox.com

私はこのバンドの存在を10年以上前から知ってはいたが、2023年までしっかり聴いたことがなかった。しかし、旅行中にたまたまSpotifyにサジェストされて彼らの楽曲を聴いて、その凄さにすっかり引き込まれた。
彼らの楽曲では、一人称に「僕/ぼく」を用いられることが多いが、ごくたまに「俺/オレ/おれ」が使用されていることがあるのに気づいた。この手の知的で物静かな雰囲気を持つ男性の一人称の揺らぎは、良い意味でちょっと引っかかる。しかし、2003年結成というキャリアの長いバンドであるため楽曲数が多く、すべてを一曲ずつ目視で確認するのは骨が折れる。そこで、スクレイピングに挑戦しつつ調べてみることにした。

「螺旋をほどく話」、凄すぎて意味がわからない。音の当て方、拍の取り方、タイトル、歌詞すべてが凄すぎる。

https://open.spotify.com/track/0WGriQMR00SkKf8ANKVwjA?si=2bs9cjItTJCr1R6lNmIVfA&context=spotify%3Asearch%3A%25E3%2582%2589%25E3%2581%259B%25E3%2582%2593%25E3%2582%2592

# 人生初スクレイピング

```python
pip install --upgrade pip
pip install beautifulsoup4
pip install requests

import requests
from bs4 import BeautifulSoup

# アーティストのページURL
url = 'https://www.uta-net.com/artist/8174/'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 曲のリンクを格納するリスト
song_links = []

# すべての曲のリンクを取得
for link in soup.find_all('a'):
    href = link.get('href')
    if href and '/song/' in href:  # 曲へのリンクを確認
        full_link = f'https://www.uta-net.com{href}'
        song_links.append(full_link)

# 各曲の歌詞を取得
for song_link in song_links:
    song_response = requests.get(song_link)
    song_soup = BeautifulSoup(song_response.text, 'html.parser')
    
    lyrics = song_soup.find('div', id='kashi_area').text
    
lyrics_data = []

# すでに定義されているsong_linksリストを使用
for song_link in song_links:
    song_response = requests.get(song_link)
    song_soup = BeautifulSoup(song_response.text, 'html.parser')
    
    # 曲のタイトルと歌詞を取得
    title = song_soup.find('title').text
    lyrics = song_soup.find('div', id='kashi_area').text.strip()  # .strip()で前後の不要な空白を削除
    
    # 曲のタイトルと歌詞をリストに追加
    lyrics_data.append({
        'title': title,
        'lyrics': lyrics
    })

# リストをDataFrameに変換
df_lyrics = pd.DataFrame(lyrics_data)

# 全然関係ない曲のデータも取れてしまったので消す
df_lyrics = df_lyrics[:113]


def count_words(lyrics, word):
    return lyrics.count(word)
```

# 集計
```python
# 各単語に対してカウントを行う
df_lyrics['俺_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, '俺'))
df_lyrics['オレ_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, 'オレ'))
df_lyrics['おれ_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, 'おれ'))
df_lyrics['僕_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, '僕'))
df_lyrics['ぼく_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, 'ぼく'))
df_lyrics['私_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, '私'))
df_lyrics['自分_count'] = df_lyrics['lyrics'].apply(lambda x: count_words(x, '自分'))

# 各単語の総出現回数を集計
total_counts = {
    '俺_total': df_lyrics['俺_count'].sum(),
    'オレ_total': df_lyrics['オレ_count'].sum(),
    'おれ_total': df_lyrics['おれ_count'].sum(),
    '僕_total': df_lyrics['僕_count'].sum(),
    'ぼく_total': df_lyrics['ぼく_count'].sum(),    
    '私_total': df_lyrics['私_count'].sum(),
    '自分_total': df_lyrics['自分_count'].sum()
}

print(total_counts)
```
# 結果
```python
{'俺_total': 0, 'オレ_total': 2, 'おれ_total': 2, '僕_total': 144, 'ぼく_total': 59, '私_total': 0, '自分_total': 1}
```

俺/オレ/おれ：4回
僕/ぼく：213回
私：0回
自分：1回

「俺/オレ/おれ」を使っているのは4回(1.8％)であった。
曲数では全113曲のうち3曲のみ(「眼球都市」、「季節の子供」、「ミネルヴァ」）。

# 一人称としての「俺/オレ/おれ」かの検証

①「眼球都市」

https://open.spotify.com/track/51VFpfCL61OC8FHPu1R3f3?si=R-pJ0xHRQva9OIm_U62FRQ&context=spotify%3Asearch%3A%25E7%259C%25BC%25E7%2590%2583%25E3%2581%25A8%25E3%2581%2597

    点/線/矩形/曲線フェイズ/トレース/彩色/カレイドスコープ
    巨大なステップ踊るコルトレーン　
    描くトライアングル山手線　東京　乗るトレイン　
    円なぞれば天気と同じ気分でパレードはたしかエレクトリカル
    機嫌は記号次第で心は愛しいフラクタル
    ノイローゼ/治療/処方オレンジ/空はシアニド背骨は　S字　とんがり帽子　
    目は逆さ十字ねじの回転　そう、きみは異分子　
    ワッチングユー電気と同じ気分で調子の波はパラメトリカル
    紀元は記号次第でテーブルマナーはシアトリカル
    燃えるまぶたから垂らす万国旗
    ひきずり出したら挨拶するのさ　
    ヘイ、ベイブぼくのハートは幾何学模様
    天気と同じ気分でパレードはたしかエレクトリカル
    機嫌は記号次第で心は愛しいフラクタル
    きみに視えるかな
    ぼくのハートは幾何学模様きみに視えるかな
    ぼくのハートは幾何学模様視力　
    1000.0ワッチングユー/ワッチングミー

一人称としての「オレ」ではなく「オレンジ」だった。

②「季節の子供」

https://open.spotify.com/track/6LIqIO8mYG7fu7jpYGsPIs?si=JnqJoDMMQAabhhvy7bXxQQ&context=spotify%3Asearch%3A%25E3%2581%258D%25E3%2581%259B%25E3%2581%25A4%25E3%2581%25AE

    顔を上げて見渡せば季節が変わる匂いがした
    金色の塵が頬をかすめる思い出すのはなにまんまるい目をした跳ねる影
    ひとつふきのとう芽が出たのを見つけて声を上げた
    あれからいくつの夢をなくしたここは安全だよ帰っておいで
    ひとはもう変われないというならぼくはまだここにいるよ
    春がきて　花が降れば　みるまに季節の子供は溢れだした
    冬を経た木々が空へ突き刺さっている街中歩きまわれば誰かひとりにでもあえるかな
    もう悲鳴のような遠くの大きな機械の音は聴こえない
    オレンジとレモンとリンゴの木風が吹いてベルが鳴る
    足を一斉に踏み鳴らすお祭りの日
    ひとはもう変われないというならぼくはまだここにいるよ
    春がきて　花が降れば　みるまに季節の子供が溢れだしてきみを笑う

これも、一人称としての「オレ」ではなく「オレンジ」だった。オレンジ好きなのかな。

③「ミネルヴァ」

https://open.spotify.com/track/7ayJDx5LDpquCVorzs8X6b?si=KJpplKPhRqGvo3Th60nn4w&context=spotify%3Asearch

    配送業者埋め尽くすハイウェイ廃棄された湿った瓦礫　縫って住む部族
    機械的複製が抑制している欲望は脳波を描き換える　
    なだらかに集合体は空洞内の高炉へ降臨中溶鉱炉へ降臨こうなることを待っていたんだ
    締め上げるワイヤー肉体を溶かしてしまうまで
    差し出した両腕おれはさながら剥製のヴィーナス
    焼き切れるワイヤー壊すため壊すだけだ　
    理由はDo you remember？Where are you, Minerva？
    逆流する遺伝子　拭き取れ幸福な淘汰　
    統合された未来の家系図かけがえのあるたったひとつへ
    有象無象はボーダーを越え入れ替わっていく
    集合体は空想しながらお取り込み中
    ああ　とうに氷のように凍り凝固中
    締め上げるワイヤー肉体を溶かしてしまうまで
    差し出した両腕おれはさながら剥製のヴィーナス
    焼き切れるワイヤー壊すため壊すだけだ 
    理由はDo you remember？Where are you, Minerva？
    かけがえのあるたったひとつになりたい？かけがえのあるおおきなひとつになりたい？

2024/3/7時点で、2003〜2024年の21年間でPeople in the boxが生み出した113曲の中で、一人称に「おれ」を使用している曲は「ミネルヴァ」一曲のみであった。  

ちなみに、筆者がいちばん好きでよく聴く曲がまさに「ミネルヴァ」である。
筆者はリズム隊ゴリゴリのパワー系バンドサウンド等が好みであるため、People in the boxの中でも「ミネルヴァ」が一等お気に入りなのだが、そういった楽曲だから一人称が「おれ」なのかしら。

蛇足だが、「ミネルヴァ」のサビと、ART-SCHOOL「スカーレット」はコード進行が似ている気がする。

https://open.spotify.com/track/6RCa83gGWnbhxe0pRsWHcy?si=OXvlFm4tRBKjkCVPPtbByw&context=spotify%3Asearch


# 感想
BeautifulSoupはすごく大変なものと勝手に思い込んでいたが、そうでもないことがわかって良かった。実務でもモリモリ使っていきたい。

# 追記
「この手の知的で物静かな雰囲気を持つ男性の一人称の揺らぎは、良い意味でちょっと引っかかる。」って自分でもなんなんだと思っていたが、学生時代に読んだ『暇と退屈の倫理学』の影響だった。

> 数年前のこと。
> 俺は歌舞伎町が好きなフランス人の友人といっしょにあの界隈をぶらついていた。
> （太田出版/國分功一郎著　『暇と退屈の倫理学　増補新版』まえがき　より引用）

https://www.ohtabooks.com/publish/2015/03/07000000.html

![IMG_1279.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661209/20c835b3-fb83-1e9e-ddf9-ad0e39ceae2d.jpeg)

家宝