順番が前後してしまいましたが今回が1回目です。
ホームページ:https://program-board.com
ウェブスクレイピングの勉強として,Filmarksより年代別で高評価となっている映画一覧の作成を最終目的としたデータ抽出を行います.本稿では,とりあえず第1目標としてFilmarksの1ページ目の映画タイトルを抽出することを目指します.
#なぜ,Filmarksなのか
多くの映画レビューサイトがある中で,なぜ「Filmmarks」なのか.理由はHTMLの構造式が単純でスクレイピング初心者に向いているからではないか,とのことです.実際そうなのか,検証はできていませんが,素人ではわからないので素直に従います.以下の文はネットより抜粋したものです.
Filmarksは「国内最大級の映画レビューサービス」です。2018年8月23日22時頃で5314万3638件のレビューが掲載されています。 映画レビューサイトはFilmarks以外にもYahoo!映画や映画.com、みんなのシネマレビューなどがあります。 ほかにも映画レビューサイトはあるのになぜFilmarksからレビューを取得するのかというとまず「HTMLの構造が単純でスクレイピングしやすい」というのがあります。複雑なHTML構造をしていないため、スクレイピング初心者の方やPython初心者の方がスクレイピングを学ぶ入り口としてはちょうどいいのではないかと思います。 https://crimnut.hateblo.jp/entry/2018/08/30/120000
#モジュール
主なモジュールは,webデータダウンロード用の「requests」,HTML解析用のライブラリ「bs4(beautiful soup4)」を用います.import requests #webデータダウンロード用 from bs4 import BeautifulSoup # HTML解析用のライブラリ</code></pre></div>
#webページの情報を取得
requestsを用いてWebページをダウンロードにかかります.requests.getを用いて任意の以下のURLのページをダウンロードします.https://filmarks.com/list/trend
import requests url= 'https://filmarks.com/list/trend' res = requests.get(url) res.text
#HTMLの情報を整形
商品ページのHTMLがダウンロードできました.しかし,HTMLの内容が改行なしのべた書きのため,このままでは解析しづらいです.
そこで,解析しやすくするためにbs4を使い,読みやすい形に整形します.※ここでは,BeautifulSoupの引数にHTMLの情報だけを用いているが,人によっては「features='lxml'」を入力しないと回らないようです.import bs4 soup = bs4.BeautifulSoup(res.text) #features='lxml') print( soup.prettify()
#抽出したい項目を確認
HTMLの情報の整形はできました.では,抽出にかかります.本稿では映画タイトルを抽出いたしますが,HTMLで映画タイトルがどのように格納されているか,わかりません.ここでは,Safariの場合で抽出したい情報の確認方法を記述します.
#Safariの設定
SafariでHTMLの情報(ソースコード)を確認するには,デフォルトの設定から変更する必要があります.Safariの環境設定を開き,「詳細」の下部分に「メニューバーに"開発"メニューを表示」にチェックを入れます.
これにより,ソースコードの閲覧ができます.今回は映画のタイトルを抽出するので,タイトルを右クリックし,「要素の詳細を表示」より映画タイトルを示すソースコードがわかります.
#ソースコードの確認
上記の作業より,以下のような画面になります.この画面における映画のタイトルを示すソースコードは,左側の赤枠と右側の青ハッチングです.本稿でのプログラムでは左側の赤枠をつかいます.
ソースコードの意味自体は勉強不足でわかっていませんので,わかり次第記載します.
※他サイトでは右側のソースコードをベースに用いているが,筆者の構文では回らなかったので以下のサイトを参考にしています.回らなかった理由いついて,投稿時(10/02)ではわかっていません.
PythonでAmazonのレビューをサーチ#タイトルの抽出
抽出したい情報のソースコードがわかったので,関数は.select(ソースコード)を用いり映画タイトルを抽出します.
titles = soup.select('h3.p-movie-cassette__title') #ソースコード for title in titles: print(title.text)</code></pre></div>
#今後の予定
本稿ではFilmarksの1ページ目の映画タイトルのみを抽出しました. 今後は以下のようなことをやりたいと考えております.
1ページ目で映画タイトル以外の項目も同時に抽出する1-10ページまでの情報を抽出する.Filmarksの全ページの情報を抽出する.年代別で高評価となっている映画一覧の作成(ここではSQLも使用する予定)時間はかかるとは思いますが,徐々にやっていきます.
#参考文献
Filmarksから鑑賞済映画のスコア一覧を取得する
PythonでFilmarksから映画レビューを全件取得する
PythonでAmazonのレビューをサーチ
Safariでウェブページのソースコードを見る方法。(HTML & CSS)