歌詞をスクレイピングする技術を紹介します。
歌詞を検索するとき、
・広告が出てきてうざい
・変にコードがひっついてきて、必要な情報が取れない
・テキストファイルかと思いきや画像だった
みたいな感じで結構煩わしく思った経験はありませんか?
ここでは歌詞をスクレイピングするソースを紹介します!
是非お試しあれ!!
ソース内容
今回はスクレイピングを用いるので、
BeautifulSoup4をあらかじめインストールして下さい。
インストール方法は
pip install BeautifulSoup4
と入力して実行して下さいね。
BeautifulSoupは基本的にネットから情報を吸い出すためのライブラリです。
スクレイピングを行うときは基本的に激ウマスープ(BeautifulSoup)を使います。
#歌詞の習得テキスト化
import requests
from bs4 import BeautifulSoup
print("歌手名入力")
band = input()
print("歌名入力")
song = input()
def main():
# URL の指定
url = "https://utaten.com/lyric/" +str(band) + "/"+str(song)
# ページの取得
html = requests.get(url).text
# HTML の保存
with open("config.html", mode="w", encoding="utf-8") as file:
file.write(html)
soup = BeautifulSoup(html, "html.parser")
article = soup.find("article", class_="contentsBox movie_box")
# タイトルの取得
span = article.find("span", class_="movieTtl_mainTxt")
title = span.text[1:-1]
# 作者の取得
dl = soup.find("dl", class_="lyricWork")
dds = dl.find_all("dd")
lyricist = dds[0].text
composer = dds[1].text
# 歌詞の取得
div = soup.find("div", class_="hiragana")
div.find("span", class_="rt").extract()
print(title)
#print(lyricist, composer)
print(div.get_text())
#書き込み用ファイルの生成
path_w = "kashi.txt"
s = div.get_text()
with open(path_w, mode='a') as f:
f.write(s)
if __name__ == '__main__':
main()
上記がスクレイピウングのソースになります。
簡単に解説します。
import requests
from bs4 import BeautifulSoup
ライブラリーのインポート宣言部分になります。
print("歌手名入力")
band = input()
print("歌名入力")
song = input()
こちらで歌手名と歌名を入力するためのinput関数になります。
それぞれbandとsongの関数に引数としてぶっ込みます。
def main():
# URL の指定
url = "https://utaten.com/lyric/" +str(band) + "/"+str(song)
# ページの取得
html = requests.get(url).text
# HTML の保存
with open("config.html", mode="w", encoding="utf-8") as file:
file.write(html)
soup = BeautifulSoup(html, "html.parser")
article = soup.find("article", class_="contentsBox movie_box")
ここがメインのソースになります。
URLに歌手名と歌名を入れた引数をstr 型にしてぶっ込んで検索させます。
URLのページから情報を吸い出すためにRequestsのライブラリーが必要となります。
あとはBS4を使って必要な情報だけを汲み取るといった流れになります。
u # タイトルの取得
span = article.find("span", class_="movieTtl_mainTxt")
title = span.text[1:-1]
# 作者の取得
dl = soup.find("dl", class_="lyricWork")
dds = dl.find_all("dd")
lyricist = dds[0].text
composer = dds[1].text
# 歌詞の取得
div = soup.find("div", class_="hiragana")
div.find("span", class_="rt").extract()
print(title)
print(lyricist, composer)
print(div.get_text())
ここからはデータの取得ブロックになります。
ここはスクレイピングを行うページにいって作り込む必要があります。
したがって詳しくは割愛します。
最後撮ってきたデータを出力します。
下記が出力結果になります。
画像が全部取れなかったので、一部割愛していますがこのまま実行してもらえればしっかり実行できる様になっています。
今回は歌詞をPythonでスクレイピングする紹介でした。
コメントをお書きください