【初心者でも可能】PythonでWebスクレイピングに挑戦してみよう!

Python

*記事に掲載されているコードは2023年4月現在問題なく起動します。(検証済み)

こんにちは! 【文系・非エンジニア】マーケターのNocky(のっきー)です! 

今回はPythonでWebスクレイピングに挑戦!と題して、BeautifulSoupを活用したWeb情報の取得方法について紹介していきます!

今回は人気アーティストあいみょんの歌詞情報をWebスクレイピングして取得したいと思います!

Webスクレイピングを行う場合は、サイトの利用規約を確認してスクレイピングが禁止されていないか念のため確認しておきましょう!。

スポンサーリンク

Webスクレイピングで歌詞を取得するPythonのコード

webスクレイピング で歌詞情報を取得するためのコードは下記になります。
コピペして、取得したいアーティストの歌詞ページのurlを変更して調整してみてください。

また、スクレイピングしたいサイトがあればurlやhtmlの要素を変更して、挑戦してみてください!

Google Colaboratoryなら、Googleのアカウントがあれば、すぐpythonを使うことができます。

ちなみに今回はGoogle Colaboratoryで実行しています。
Anacondaでエラーになっていまい、解決できていないためw (萎える。)

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

#スクレイピングしたデータを入れるフォーマットを作成
list_df = pd.DataFrame(columns=['曲名','歌詞'])

#歌詞ページはページ数に合わせて、範囲を変更してください。
#歌詞ページのページ数(xページ)に合わせて、 xに+1して(0,x+1)活用してください。
for page in range(0,1): 
    base_url = 'https://www.uta-net.com'

    #歌詞一覧ページを取得
    #ページが複数ページであった場合は下記を活用してください。
    #url = 'https://www.uta-net.com/artist/******/0/' + str(page) + '/'
    #ページが複数ページの場合は下記の一文を[#]でコメントアウトしてください。
    url = 'https://www.uta-net.com/artist/17598/'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    links = soup.find_all('td', class_='sp-w-100')
    
    #歌詞情報を取得
    for link in links:
        a = base_url + (link.a.get('href'))
        response = requests.get(a)
        soup = BeautifulSoup(response.text, 'lxml')
        song_name = soup.find('h2').text
        detail = soup.find('p', class_="detail").text
        
        song_kashi = soup.find('div', id="kashi_area")
        song_kashi = song_kashi.text
        song_kashi = song_kashi.replace('\n','')
        song_kashi = song_kashi.replace('この歌詞をマイ歌ネットに登録 >このアーティストをマイ歌ネットに登録 >',' ')
        #サーバーに負荷を与えないため1秒待機
        time.sleep(1)
        #取得した歌詞を表に追加
        tmp_se = pd.DataFrame([[song_name], [song_kashi]], index=list_df.columns).T
        list_df = list_df.append(tmp_se)

#csv保存
list_df.to_csv('aimyon_list.csv', mode = 'w', encoding='utf-8')

今回のPythonのコード構成は以下のようになっています。

  1. ライブラリのインポート
  2. スクレイピングしたいサイトにアクセス
  3. WEBサイトから情報取得
  4. 取得情報の整理、加工
  5. サーバーへの負担を減らすための待機
  6. CSVファイルに出力

Pythonのコードの説明

それでは、それぞれのコード(機能のかたまり)ごとに詳しくみていきます!

ライブラリのインストール

まずは今回、必要なPythonのライブラリをインストールしていきます。

ターミナルを開いて、下記のコードでインストールしてください。

pip install requests
pip install beautifulsoup4
pip install pandas 

google colaboratoryの場合は下記の文頭に「!」を付けてインポートしてください!下記のようにノートブックに直接入力してください。

ライブラリのインポート

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

Webスクレイピング を行うために必要なライブラリは「requests」と「BeautifulSoup」です。

requests」はwebサイトにアクセスして情報を取得できるライブラリ、「BeautifulSoup」はHTMLの各要素の情報を取得できるライブラリです。

他のライブラリの以下の目的でインポートしています。Pandasがインストールされてないようでしたら、「pip intall pandas」でインストールしてください。 timeはpythonの標準ライブラリなので、インストールしなくても大丈夫です。

  • pandas => 取得データを加工する
  • time => 時間を扱うことができるモジュール

Webスクレイピング したいサイトへアクセス

base_url = 'https://www.uta-net.com'
url = 'https://www.uta-net.com/artist/17598/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
links = soup.find_all('td', class_='sp-w-100')

この部分でWebサイトにアクセスを行なっています。

今回はurlにあいみょんの歌詞ページのトップページを指定しています。
そして、そのurlのあるwebサイトの情報をresponseに代入し、さらに、HTMLの情報のみをsoupに代入して、<td class=’side td1′>の情報全てをlinksに代入しています。

*更新情報 以前はclass_=’side td1’ でしたがclass_=’sp-w-100’に変更があったようです!

このようにどんどん必要な情報に近づいていきます。

WEBサイトから情報取得

for link in links:
    a = base_url + (link.a.get('href'))
    response = requests.get(a)
    soup = BeautifulSoup(response.text, 'lxml')
    song_name = soup.find('h2').text
    detail = soup.find('p', class_="detail").text
   song_kashi = soup.find('div', id="kashi_area")
   song_kashi = song_kashi.text

次にfor文使ってlinksに代入している全ての曲名のリンクをlinkに1つずつ代入して、

曲名をsong_name、歌詞の情報をsong_kashiに代入しています。

取得情報の整理

song_kashi = song_kashi.replace('\n','')
song_kashi = song_kashi.replace('この歌詞をマイ歌ネットに登録 >このアーティストをマイ歌ネットに登録 >',' ')

不必要な改行や’この歌詞をマイ歌ネットに登録 >このアーティストをマイ歌ネットに登録 >’などの不必要な文言を取り除きます。

サーバーへの負担を減らすための待機

time.sleep(1)

曲の情報を取得したら、1秒待機してから次の曲の情報を取得するようにこのコードを入れています。
サーバーに負荷をかけて、WEBサイトに影響しないように配慮しましょう。

CSVファイルに出力

tmp_se = pd.DataFrame([[song_name], [song_kashi]], index=list_df.columns).T
list_df = list_df.append(tmp_se)
list_df.to_csv('aimyon_list.csv', mode = 'w', encoding='utf-8')

最後に取得した曲名と歌詞を確認しやすいように表データに加工し、名前をつけてCSVで保存して終了です!

このようは形で保存できれば成功です!!

お疲れ様でした!

終わりに

いかかでしたでしょうか!?

今回はPythonでWebスクレイピングに挑戦!と題して、

BeautifulSoupを活用したWeb情報の取得方法について紹介してきました!

実行環境によっては、うまくコードが作用しなかったりするかもしれませんが、ご容赦ください。 

そんな時は、Google Colaboratoryで実行してみてください!なぜか上手くいくケースが多いです。
私の場合w

お付き合いいただき、ありがとうございました。

次回は以前の記事でも紹介した文章の可視化ができる【WordCloud】と日本語の形態素分析ができる【janome】を使って歌詞データの頻出文字の可視化に挑戦してみたいと思います!

それでは、また他の記事で会いましょう〜!

おすすめ記事
【WordCloud】で文章の可視化に興味がある方は下記の記事をご覧ください。

筆者が学んだおすすめできるUdemy講座(Python編)についてまとめています!

この記事を書いた人
Nocky

メガベンチャーで働くマーケティング×データアナリスト的なポジションのサラリーマン

マーケティング×データサイエンスについての情報をメインに投稿。
プログラミング(Python、Javascript)、統計学、マーケティング、WEBデザインなどについて学び、アウトプットしていきます!!

Nockyをフォローする
Python
スポンサーリンク
シェアする
error: Content is protected !!
タイトルとURLをコピーしました