第5回

私たちのグループは、一部の歌詞を入力すると
該当する曲の「曲名」や「歌詞」が表示される仕組みを作ることはできないかと考えました。
そのためにまず、歌詞検索サイトのリンクからPython上で歌詞を表示させる仕組みを
「スクレイピング」で実現させる方法を試しました。
参考サイトを基にbeautiful soupというライブラリをインポートしスクレイピングを行いました。

サイトをコピペしたコードが以下のようになります。
  1. import requests
  2. from bs4 import BeautifulSoup
  3.  
  4. print("歌手名入力")
  5. band = input()
  6. print("歌名入力")
  7. song = input()
  8.  
  9. def main():
  10.     # URL の指定
  11.     url = "https://utaten.com/lyric/" +str(band) + "/"+str(song)
  12.     # ページの取得
  13.     html = requests.get(url).text
  14.     # HTML の保存
  15.     with open("config.html", mode="w", encoding="utf-8") as file:
  16.         file.write(html)
  17.  
  18.     soup = BeautifulSoup(html, "html.parser")
  19.     article = soup.find("article", class_="contentsBox movie_box")
  20.  
  21.     # タイトルの取得
  22.     span = article.find("span", class_="movieTtl_mainTxt")
  23.     title = span.text[1:-1]
  24.  
  25.     # 作者の取得
  26.     dl = soup.find("dl", class_="lyricWork")
  27.     dds = dl.find_all("dd")
  28.     lyricist = dds[0].text
  29.     composer = dds[1].text
  30.  
  31.     # 歌詞の取得
  32.     div = soup.find("div", class_="hiragana")
  33.     div.find("span", class_="rt").extract()
  34.  
  35.     print(title)
  36.     #print(lyricist, composer)
  37.     print(div.get_text())
  38.     
  39.     #書き込み用ファイルの生成
  40.     path_w = "kashi.txt"
  41.  
  42.     s = div.get_text()
  43.  
  44.     with open(path_w, mode='a') as f:
  45.         f.write(s)
  46.  
  47. if __name__ == '__main__':
  48.     main()
サイト通りに実行してみると、「歌手名」と「歌名」を入力した段階でエラーが発生してしまいました。
その後、道用先生の助けを借りて、参考サイトと現在のうたてん(歌詞検索サイト)のタグが異なっていることが判明しました。
この部分↓

そのため、曲名や作曲者、歌詞を囲んでいるタグの中身を、HTMLのソースコードから探し出し、
それっぽいものをひとつずつ打ち込んでいけば成功するかもしれないとアドバイスをいただきました。
↓この辺から該当しそうなタグを探す


そして実践してみた結果


最終的に歌詞を表示させることはできませんでした。
しかし、課題を通してスクレイピングとは何か、スクレイピングをするために使うライブラリとは何かなど
様々なことを学ぶことができました。
また、今回は課題提出の時間までに間に合わず完成させることができなかったのですが、
他のサイトを参考にしてみたり、タグを片っ端から入れてみたりすれば完成させられるかもしれないので
時間があるときにやってみようと思います。
参考サイト
スクレイピングとは
デザイン演習TOP XBPTOP