映画レビューサイトから情報をスクレイピング①俳優の出演作品一覧
映画ドットコムからいろいろ情報を抽出して分析してみる!
今回は特定の俳優さんのページから出演作品一覧を取りこんでみる。
まずは必要なライブラリをインポート
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に出力
↓↓↓↓↓
こんなファイルができた!