Genius の Python を使用して歌詞をスクレイピングするためのガイドライン

公開: 2019-08-08
目次を見る
Genius からデータをクロールする必要があるのはなぜですか?
Python を使用して Genius から歌の歌詞を Web スクレイプする方法は?
コードはどこにありますか?
コードの説明
実際のコードの例
このソリューションのスケーラビリティは?

ラップジーニアスとは

2009 年に Rap-Genius としてスタートした会社は、今ではユニークな音楽知識共有メディア会社Geniusに発展し、毎月 1 億人以上にサービスを提供しています このブログでは Python を使用て曲の歌詞を Web スクレイピングする方法をステップバイステップ ガイドで学習します。

音楽好きのほとんどのインターネット ユーザーは、 Geniusに精通しているはずです。 これは急成長中のウェブサイトで、曲背後にあるもの、アーティストが曲を書き留めたときの考えなどを共有します アリアナ・グランデやケンドリック・ラマーのような有名なアーティストでさえ、ジーニアスと協力して、世界に彼らの芸術へのより深い洞察を与えています.

歌詞をクロールしたい人は、その目的が何であれ、Genius に行くべきです。 2,500 万を超える曲、アルバム、アーティスト、および注釈のデータベースは、世界中のどこにいても最大の歌詞データベースです

Genius からデータをクロールする必要があるのはなぜですか?

Genius は、寄稿者、ミュージシャン、さらには編集者が集まって曲を解体する音楽コミュニティへと進化しました。 このため、彼らは世界最大の音楽歌詞ライブラリになっています。 また、Genius は音楽ストリーミング会社と提携して、ユーザー ベースを拡大しています。

Genius は、そこから音楽の歌詞やその他の音楽業界関連のデータを Web スクレイピングしてクロールする場所です。 歌詞の膨大なリポジトリを提供するだけでなく、ユーザーのコメントやユーザーの感情にもアクセスできるためです。 Genius! から抽出されたデータに基づいて、新規ユーザーの間で現在どのジャンルがヒットしているかを予測できると想像してみてください。

Python を使用して Genius から歌の歌詞を Web スクレイプする方法は?

Web のスクレイピングに関して言えば、さまざまなタイプの Web スクレイピング プロジェクトをサポートする言語はほとんどありません。 とりわけ、Python は習得が最も簡単で、さまざまな種類のプロジェクトにも役立ちます。 Python に加えて、サードパーティの Python パッケージとテキスト エディターも必要です。 スクレイピングする Web サイトに関係なく、セットアップは同じであるため、このページの指示に従うことができます。 完了し、システムをセットアップしたら、開始する準備が整いました。

コードはどこにありますか?

それで、歌詞、Genius、および基本的なセットアップについて多くのことを話しました。 実行方法とコードの仕組みを説明する前に、Python を使用して歌詞をスクレイピングするためのコードを簡単に見てみましょう

[コード言語=”パイソン”]
#!/usr/bin/python
#- * -コーディング: utf – 8 – * –

urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート
インポートアスト
OS のインポート
from urllib.request import リクエスト、urlopen

# SSL 証明書エラーを無視する場合

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# ユーザーからの入力
url = input('ジーニアスの歌詞URLを入力-')

# Mozilla ブラウザを使用してアクセスしていると Web サイトに信じ込ませる
req = Request(url, headers = { 'User-Agent' : 'Mozilla/5.0' })
ウェブページ = urlopen(req).read()

# データを簡単に抽出するために、HTML ページの BeautifulSoup オブジェクトを作成します。

スープ = BeautifulSoup(ウェブページ, 'html.parser')
html = スープ.prettify('utf-8')
song_json = {}
song_json[“歌詞”] = [];
song_json[“コメント”] = [];

#曲のタイトルを抽出
soup.findAll('title') のタイトル:
song_json[“タイトル”] = title.text.strip()

# 曲のリリース日を抽出
スパンの場合はsoup.findAll('span', attrs = {'class': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json[“リリース日”] = span.text.strip()

# 曲のコメントを抽出する
soup.findAll('div', attrs = {'class': 'rich_text_formatting'}) の div の場合:
コメント = div.text.strip().split(“n”)
コメントのコメント:
コメントの場合!=””:
song_json[“コメント”].append(コメント);

#曲の歌詞を抽出
soup.findAll('div', attrs = {'class': 'lyrics'}) の div の場合:
song_json[“歌詞”].append(div.text.strip().split(“n”));

#作成したjsonをタイトル+.jsonというファイル名で保存
出力ファイルとして open(song_json[“Title”] + '.json', 'w') を使用:
json.dump(song_json、出力ファイル、インデント = 4、ensure_ascii = False)

# html コンテンツをタイトル + .html という名前の html ファイルに保存します
open(song_json["Title"] + '.html', 'wb') をファイルとして使用:
ファイル.書き込み(html)

print('————-データの抽出が完了しました.jsonファイルを確認してください.————-')
[/コード]

上記のコードを実行するには、拡張子 .py を付けてファイルに保存するだけです。 たとえば、songLyricsExtractor.py という名前のファイルに保存し、ターミナルから次のコマンドを実行します。

[コード言語=”パイソン”]
python songLyricsExtractor.py
[/コード]

実行すると、URL を入力するよう求められます。 これは、Genius Web サイト内の任意の曲へのリンクにすることができます。 このリンクは、Lana Del Rey の Looking for America に使用できます。 コードが実際にどのように機能するかを示すために、この曲の歌詞を Genius から抜粋しました。これについては、ブログの後半で説明します。

コードの説明

コードを実行して何が得られるかを理解する前に、コード自体を理解してみましょう。 いつものように、 HTML ページを解析するライブラリである BS4 (または Beautiful Soup) を使用しています。

最初に、Web ページを取得し、それを Beautiful Soup オブジェクトに変換します。そこから、特定の属性を持つ div、span、title、およびその他のタグを取得できます。 これらの手法を使用して、歌詞、コメント、ウェブページのタイトル、および曲が実際にリリースされた日をクロールします。 このデータをスクレイピングしたら、JSON ファイルに保存し、名前-ページのタイトル+.json 拡張子を付けます。 また、ページの名前 title + .html 拡張子で HTML ファイルを保存します。 これは、HTML ページを分析して、将来さらに多くのデータ ポイントを見つけることができるようにするためです。

実際のコードの例

コードを実行して Genius の曲のリンクを指定すると、以下のような JSON が得られます。 以下は、Lana Del Rey の Looking for America で取得した JSON です。 サイズが非常に大きいため、1 つの JSON のみを提示しましたが、お気に入りの曲に対しても実行できます。

[コード言語=”パイソン”]
{
"歌詞": [
[
「[詩1]」、
「サンフランシスコに旅行に行きました」、
「私たちの友達は皆、ジャイブすると言っていました」、
「うまくいかなかったので、フレズノに行きました」、
「とても風光明媚なドライブでした」、
「公園で子供たちを見守るために停車しました」、
「私たちは暗くなってから彼らのことだけを心配していました」、
「」、
"[コーラス]"、
「私はまだ自分のバージョンのアメリカを探しています」、
「旗が自由に飛ぶ銃のないもの」、
「空に爆弾はなく、あなたと私が衝突したときの花火だけ」、
「それは私が考えていた夢です」、
「それは私が考えていた夢です」、
「それは私が考えていた夢です」、
「」、
「[詩2]」、
「私はニューヨーク市に戻りました」、
「ハドソン川線に乗り遅れた」、
「レイクプラシッドまで電車に乗った」、
「それは別の場所と時間です」,
「ドライブインに行ってブルースを聴いていた」
「そうする前によく考えることがたくさんあります。いいえ」、
「」、
"[コーラス]"、
「私はまだ自分のバージョンのアメリカを探しています」、
「旗が自由に飛ぶ銃のないもの」、
「空に爆弾はなく、あなたと私が衝突したときの花火だけ」、
「それは私が考えていた夢です」、
「それは私が考えていた夢です」、
「それは私が考えていた夢です」、
「それは私が考えていた夢です」
]
]、
「コメント」: [
[
「“Looking for America” は、2019 年 8 月 5 日にラナがアメリカ全土で起きた銃乱射事件について書いた曲で、LA に戻った後、ラナはアメリカ人にとってより良い状況を夢見ていることに基づいています。 「Coachella – Woodstock in My Mind」や「When The World Was at War We Kept Dancing」などのトラックで以前に歌ったことがあります。 Del Rey は、2019 年 8 月 9 日にストリーミング プラットフォーム経由でこの曲をシングルとしてリリースしました。",
「この曲のタイトルは、サイモン & ガーファンクルの「アメリカ」に言及している可能性があります:」,
「彼らはみなアメリカを探しに来た」
「デル・レイはインスタグラムを使って、スタジオで歌っているビデオを友人でありプロデューサーのジャック・アントノフと共有しました。」
]、
[
「Del Rey は Instagram でこの曲を共有しました:」,
「こんにちは、皆さんが今朝兄と一緒にモンテシトから早く帰ってきて、ジャック・アントノフに町に来るように頼んだのです。なぜなら、書きたい曲が頭にあったからです。 今、私は自分が政治家ではないことを知っていますし、意見を言うことを許そうとはしていませんが、ここ数日間のすべての銃乱射事件と連続した銃乱射事件を考えると、私は本当に影響を受けました細胞レベルでは、エンジニアのローラが 20 分前に撮影したこのビデオを投稿したかっただけです。 気に入ってくれるといいな。 今朝録音したコーラスに合わせて愛を歌っています。 私はそれを『アメリカを探して』と呼ぶつもりです。」
]
]、
「タイトル」:「Lana Del Rey – Looking For America 歌詞 | 天才的な歌詞」、
「発売日」:「2019年8月9日」
}
[/コード]

このソリューションのスケーラビリティは?

私たちが提供したソリューションは 1 つの曲に対するものですが、Genius で曲の歌詞ページのリンクのリストを作成し、リストのコードを繰り返し実行して、 Python を使用して曲の歌詞を Web スクレイピングすることができます また、歌詞を含む Genius ページの正規表現一致を見つけてから、一度に Genius から複数のページをクロールして、コード自体が歌詞のあるページを認識できるようにすることもできます。

ただし、これらのタイプの DIY ソリューションは、仲間の愛好家や一度だけ必要な人には適しています。 要件がより商業的であり、次のような機能が必要な Web スクレイピングの問題がある場合:

  1. 特定の形式でのデータ配信
  2. 定期的なデータ更新
  3. メンテナンスとインフラストラクチャのコストなし

次に、PromptCloud のような Web スクレイピング サービス プロバイダーを使用する必要があります。 PromptCloud の私たちのチームは、世界中のビジネス チームにエンタープライズ グレードの Web スクレイピング ソリューションを提供し、ビジネス ワークフロー内でデータを使用し、データ主導の意思決定を行えるようにすることに誇りを持っています。