こんにちはコンスキです。
Filmarksという映画レビューサイトを知っていますか?
数あるレビューサイトの中でも、特にレイアウトが見やすくておすすめのサイトです。
映画が趣味の人にとってはとても嬉しいサイトですよね。
Filmarksで映画を探すときに「今話題のおすすめ映画」のページを見る方もいると思います。
このページ、「★スコア」順に並び替えられたら便利ですよね。
今回はWebスクレイピングを使って「★スコア」順に並び替える方法をご紹介します。
Webスクレイピングとは
Webスクレイピングとは、Webサイトから情報を取ってくる技術のことです。
取ってきた情報はCUI(プログラマーが見ている黒い画面)やExcelなどで表示することができます。
今話題のおすすめ映画のページでは、残念ながら直接「★スコア」順に並び替える方法がありません(あったらすみません)。
そこで、まずサイトから「★スコア」の情報を取ってきます。
その後、プログラミングを使って「★スコア」順に並び替えます。
最後にCUIやEcelに表示します。
(ちなみにCUIは、Windowsであればコマンドプロンプト、Macだとターミナルのことを指しています)
以上のようにすることで、「★スコア」順に並び替えることを実現します。
コード
こちらがPythonで書いたコードです。
import requests
from bs4 import BeautifulSoup
import time
import random
max_page = 30
scores = []
films = []
film_info = {}
for i in range(max_page):
if i == 0:
r = requests.get("https://filmarks.com/list/trend")
else:
r = requests.get("https://filmarks.com/list/trend?page=" + str(i + 1))
time.sleep(random.uniform(1.5, 3.0))
soup = BeautifulSoup(r.content, "html.parser")
films = films + soup.find_all("div", class_="p-content-cassette__info")
print(str(i+1) + "ページ目完了")
film_count = len(films)
title_html = []
score_html = []
for film in films:
title_html.append(film.find(class_="p-content-cassette__title"))
score_html.append(film.find(class_="c-rating__score"))
titles = []
scores = []
# スコアが「-」になっている映画の個数
dash_count = 0
for count in range(film_count):
score = score_html[count].get_text()
try:
float(score)
except ValueError:
dash_count += 1
continue
titles.append(title_html[count].get_text())
scores.append(score)
# タイトルと★スコアがセットになった辞書を作る
film_info[titles[count - dash_count]] = float(scores[count - dash_count])
# スコアの降順で並び替えて表示する
for k, v in sorted(film_info.items(), key=lambda x: -x[1]):
print(str(k) + ": " + str(v))
もっと短いコードで書けるかも知れませんが、まずは使えることを重視して書きました。
知識がある人から見たら、ありえない書き方をしている部分があるかも知れません…(-_-;)
コードを実行するとページの読み込みが始まります。
読み込みが指定したページ数まで完了した後、作品名が「★スコア」順に上から表示されます。
並び替えるページ数を変更する
max_page = 30 # ここの数字を変えると並び替える映画の数を変えることができます
6行目にある「30」という数字は、何ページまでの映画を並び替えるかを表しています。
5にすれば5ページ分の映画を、100にすれば100ページ分の映画を並び替えられます。
サーバーに過度な負担がかからないように1ページアクセスした後に1.5〜3秒間の間隔を空けて次のアクセスをしています。
そのため、ページ数を多くすればするほど時間がかかってしまうことに注意してください。
使用上の注意
著作権上、こちらのコードを使って手に入れた情報は家族間や個人での使用の範囲にとどめてください。
また、ページを移動するときの間隔を現在の状態よりも短くして使用することはご遠慮ください。
いい映画を見つけやすくするには
こちらの記事では、忙しくてみる映画をじっくり選ぶ時間がない方向けに、いい映画を見つけやすくする方法をご紹介しています。
興味があったらご覧ください。
コメント