mai_Nのプログラミング勉強メモ

Python or R × マーケティング

映画レビューサイトから情報をスクレイピング①俳優の出演作品一覧

映画ドットコムからいろいろ情報を抽出して分析してみる!
今回は特定の俳優さんのページから出演作品一覧を取りこんでみる。

まずは必要なライブラリをインポート
import requests
from bs4 import BeautifulSoup
import pandas as pd
出演作品一覧のページのURLを指定する

URLを確認してみると俳優さん毎に個別のIDがあることがわかる。
あとでforループを使って複数の俳優さんの出演作品を抽出するためにここはIDからURLを作れるようにしておく。
そして複数のページにまたがった情報をとってこれるよう、URLの中のページを示す数字部分は{}にしておく。

actor_id = str(83068) #ここに俳優のIDを入力(今回は新垣結衣のIDを入れている)
url = 'https://eiga.com/person/' + actor_id + '/movie/{}/'
いよいよ情報を抽出する!
movie_list = []  #空のリストを用意。ここに情報を入れていく。
for i in range(3): #今回は3ページ目までとれるようにした。
    soup = BeautifulSoup(requests.get(url.format(i)).content) #formatを使ってページを指定する。
    movies = soup.find_all('li', class_="col-s-4") #各映画はliタブのcol-s-4クラスにあった。
    for i in range(len(movies)): #各映画について詳細情報をとっていく。
        movie = movies[i] #情報をとる映画を指定
        movie_title = movie.find('p', class_="title").text.replace("\u3000", "") #タイトル
        movie_year = movie.find('small', class_="time").text.replace("公開", "") #公開年
        movie_url = 'https://eiga.com/' + movie.find('a').get('href') #映画詳細ページのURL
        movie_id = movie_url.split("/")[-2] #俳優と同様に映画にも個別のIDがある。後で情報をとれるように保存しておく。
        movie_datum = { #辞書型データに格納する。
            "movie_title":movie_title,
            "movie_year":movie_year,
            "movie_url":movie_url,
            "movie_id":movie_id
        }
        movie_list.append(movie_datum)
   #辞書型データをリストに格納する。リストの中に、個別の映画のデータ(辞書型)が一つずつ入っていくイメージ。
最後にデータフレーム型にしてからcsv出力する
actor = soup.find('p', class_="title-link").text #俳優の名前を取得
csv_filename = "{}の出演作品一覧.csv".format(actor) #csvのファイル名を作る
DF_movie_list = pd.DataFrame(movie_list) #データフレームにする
DF_movie_list.to_csv(csv_filename, encoding="cp932") #csvに出力


↓↓↓↓↓

こんなファイルができた!

f:id:ma__i:20210727184157p:plain