Uta-Netのスクレイピング

# ライブラリのインポート
```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/ebaa5289-cf5e-fcbc-fe54-78f2c586575c.png)



# スクレイピングに使う関数①〜⑤
### ①曲名リストを作成する関数

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/2df0c793-93a4-be9b-2193-9ac8627da8bd.png)



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

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/bd147888-980f-86bf-7d1b-c0f3eca165bf.png)



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

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/cd424693-8bdf-8d19-7a77-dda04f4e5e57.png)



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

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/3c5ebcad-b4ff-87d0-a78a-c02ae285c8bb.png)



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

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

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/537d1fea-703a-def8-7033-8cad3362e34a.png)


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


# 人気ランキングからリストを作成
```python
#人気ランキングのページのurl
url = 'https://www.uta-net.com/user/ranking/artist_betu.html'
```
![スクリーンショット 2021-09-18 21.21.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/ebaa5289-cf5e-fcbc-fe54-78f2c586575c.png)


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

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

```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/94e8a3b0-6399-e442-d0a7-8bd7ee943a40.png)


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

```python
#曲名
song_title_list = []
for url in artist_ranking_url:
    song_title_list.extend(song_title(url))
```

```python
#アーティスト
song_artist_list = []
for url in artist_ranking_url:
    song_artist_list.extend(song_artist(url))
```

```python
#作詞家
song_writer_list = []
for url in artist_ranking_url:
    song_writer_list.extend(song_writer(url))
```

```python
#作曲家
song_composer_list = []
for url in artist_ranking_url:
    song_composer_list.extend(song_composer(url))
```

```python
#歌詞
song_lyric_list = []
for url in artist_ranking_url:
    song_lyric_list.extend(song_lyric(url))
```

### 作成したリストを結合する
```python
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903093/2254e0a1-53a4-9bfc-9d32-0c941493ce61.png)

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