3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Uta-Netのスクレイピング

Last updated at Posted at 2021-09-19

ライブラリのインポート

import pandas as pd
from bs4 import BeautifulSoup
import requests

#使用サイト
Uta-Netのランキング『 https://www.uta-net.com/user/ranking/artist_betu.html』
右側のTOTALの方を使います。

スクリーンショット 2021-09-18 21.21.44.png

スクレイピングに使う関数①〜⑤

①曲名リストを作成する関数

def song_title(url):
    song_title_list = []

    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    links = soup.find_all('td', class_='side td1')
    for link in links:
        title = link.find('a').text
        song_title_list.append(title)
    
    return song_title_list

スクリーンショット (147)_1.png

②アーティストリストを作成する関数

def song_artist(url):
    song_artist_list = []
    
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    links = soup.find_all('td', class_='td2')
    for link in links:
        artist = link.find('a').text
        song_artist_list.append(artist)
        
    return song_artist_list

スクリーンショット (148).png

③作詞家リストを作成する関数

def song_writer(url):
    song_writer_list = []

    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    links = soup.find_all('td', class_='td3')
    for link in links:
        writer = link.find('a').text
        song_writer_list.append(writer)
        
    return song_writer_list

スクリーンショット (149).png

④作曲家リストを作成する関数

def song_composer(url):
    song_composer_list = []

    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    links = soup.find_all('td', class_='td4')
    for link in links:
        composer = link.find('a').text
        song_composer_list.append(composer)
        
    return song_composer_list

スクリーンショット (150).png

⑤歌詞リストを作成する関数

ここの関数だけ他と異なっていて、各曲のURLに移動し、そこでスクレイピングを行っている。

def song_lyric(url):
    '''
        アーティストごとの歌詞リストを作成する関数
    '''
    song_lyric_list = []
    
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    links = soup.find_all('td', class_='side td1')

    for link in links:
        url = 'https://www.uta-net.com' + (link.a.get('href'))
        r = requests.get(url)
        soup = BeautifulSoup(r.text, 'lxml')
        lyric = soup.find('div', itemprop='text')
        lyric = lyric.text
        lyric = lyric.replace('\n','')
        song_lyric = lyric.replace('\u3000','')
        
        song_lyric_list.append(song_lyric)
        
    return song_lyric_list

スクリーンショット 2021-09-18 21.52.25.png

関数の作成はこれで全て完了。
いよいよここから、曲名、アーティスト、作詞家、作曲家、歌詞を取得し、リスト化していく。

人気ランキングからリストを作成

#人気ランキングのページのurl
url = 'https://www.uta-net.com/user/ranking/artist_betu.html'

スクリーンショット 2021-09-18 21.21.44.png

人気アーティストの各々のurlリストを作成

backnumber、嵐、RADWIMPS、…、Acid Black Cherry
Top50のアーティストのURLをartist_ranking_urlに追加し、リストを作成。

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
soup = soup.find('tbody', id="ranking-table-body-total")
links = soup.find_all('ol',class_="ranking-ol-table")
links = links[0].find_all('a')

artist_ranking_url = []
for link in links:
    url_1 = 'https://www.uta-net.com' + link.get('href')
    artist_ranking_url.append(url_1)

スクリーンショット 2021-09-18 21.57.25.png

曲名、アーティスト、作詞家、作曲家、歌詞のリストを作成

#曲名
song_title_list = []
for url in artist_ranking_url:
    song_title_list.extend(song_title(url))
#アーティスト
song_artist_list = []
for url in artist_ranking_url:
    song_artist_list.extend(song_artist(url))
#作詞家
song_writer_list = []
for url in artist_ranking_url:
    song_writer_list.extend(song_writer(url))
#作曲家
song_composer_list = []
for url in artist_ranking_url:
    song_composer_list.extend(song_composer(url))
#歌詞
song_lyric_list = []
for url in artist_ranking_url:
    song_lyric_list.extend(song_lyric(url))

作成したリストを結合する

songs_data = pd.DataFrame({'title':song_title_list, 
                           'artist':song_artist_list,
                           'writer':song_writer_list,
                           'composer':song_composer_list,
                           'lyric':song_lyric_list})

スクリーンショット (121).png

#あとがき
以上、 BeautifulSoup4とRequestsを使ったスクレイピングの練習でした。
短時間で大量のデータを取得できることから、スクレイピングの重要性を感じます。
再生数とかは取得できないので、もっと有意義なデータを取得するなら、音楽配信サービスのAPIが必要です。そのうち勉強します。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?