趣味の映画鑑賞のために、活動圏内の映画館の上映中の映画のタイトルやスケジュールなどをExcelかAccessで管理したいと思う今日この頃です。

本当はPythonなんかで、本格的にシステムを組みたいところですが、なんやかんやで重い腰が上がらないところです。

そんなこんなで、サクッとExcelのVBAなんかで、映画館のサイトをスクレイピングして、希望のリストを作って見よっかなって思い立ちました。

千里の道も一歩から。まずは、Excelでスクレイピングをするための一歩を踏み出すための靴を履く前の靴下をタンスから出した程度のところです。

ExcelとSeleniumBasicでスクレイピング?

で、今回ですが、映画館サイトに行って上映中の映画のタイトルを取得して、Excelで一覧表を作ろうってとこまでを、サクッとやっちゃおうって思っています。

そのために、SeleniumBasicを使えばいいってことで、やってみたら、想像以上に簡単だったので、備忘録も兼ねて、一連の流れをまとめてみました。

一応、ここにあるソースを貼り付ければ、シネプレックス小倉とユナイテッド・シネマなかま16の上映中の映画のタイトル一覧表のExcelシートが出来るはずです。

SeleniumBasicのインストール

まずは、SeleniumBasicをダウンロードするため下のページにアクセスしましょう。

このページの中程より下の部分に「Release page」って書いている部分がありますので、ここをクリックするとGitHubに飛ぶので、ここからダウンロードします。

s-001_111519_054447_PM

現行のバージョンは、2.0.9.0なので、「SeleniumBasic-2.0.9.0.exe」をクリックして、ダウンロードします。

s-002_111519_054500_PM

ダウンロードしたら「SeleniumBasic-2.0.9.0.exe」をダブルクリックしてインストールしましょう。

s-003_111519_054711_PM

特に気になる分岐などはないので、クリックでインストールをすすめて大丈夫です。

インストールが完了したら、VBEで「参照設定」で「Seleniumu Type Library」をチェックします。

ちなみに、VBEの「参照設定」は、ExcelからVBE(Visual Basic Editor)を起動して、メニューのツールから選択します。

s-004_111519_054742_PM

s-005_111519_054807_PM

s-006_111519_054922_PM

もし、Excelのリボンに開発タブや「Visual Basic」が表示されていなければ、こちらをご参照して見て下さい。

Excel 2007で、マクロ関係の[開発]タブをリボン表示する方法

まずは、簡単に動かしてみよう!

VBEで、新しく標準モジュールを追加して、以下のソースをコピペしてみて、実行してみて下さい。

Sub test()
    
    Dim Driver As New Selenium.WebDriver
   
    Driver.Start "chrome"
    Driver.Get "https://www.unitedcinemas.jp/kokura/"
    Stop

End Sub

chromedriver.exeの入れ替え

すると、こんなエラーが出ると思います。

s-007_111519_054935_PM

実行時エラー ’33’:

SessionNotCreatedError

session not created exception

from unknown error: Runtime.executionContextCreated has invalid ‘context’: {“auxData”:{“frameId”:”D8BC8DDB07C36BFB8A1D6BC57B1B7D26″,”isDefault”:true,”type”:”default”},”id”:1,”name”:””,”origin”:”://”}

   (Session info: chrome=78.0.3904.97)

   (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 10.0 x86_64)

Chrome用の「chromedriver.exe」が古いことによるエラーなので、ここからChromeのバージョンにあった「chromedriver.exe」をダウンロードします。

ちなみに、Chromeのバージョンの確認は、Chromeの右上の「Google Chromeの設定」から「ヘルプ」、「Google Chromeについて」を見ましょう。

s-011_111519_055156_PM

今のバージョンは「78.0.3904.97」と表示されていますので、「ChromeDriver 78.0.3904.70」をクリックします。

s-008_111519_055057_PM

s-009_111519_055113_PM

ダウンロードしたファイルを解凍して「chromedriver.exe」を「C:\Users\(ユーザー名)\AppData\Local\SeleniumBasic」に移動します。

これで、エラーの対応は完了ですので、もう一度実行してみましょう。

すると、コードの「Stop」の部分で停止した状態でChromeが立ち上がり、ホームページが表示されていると思います。

s-012_111519_055208_PM

ここまでで、設定と簡単なテストは完了です。

プログラムの完成

ここで、本格的?にサクッとプログラムです。

多分下のソースを貼り付けるとシネプレックス小倉とユナイテッド・シネマなかま16の上映中の映画のタイトル一覧表のExcelシートが出来るはずです。

もし動かなければ、ホームページの構成が変わっているかもしれませんので、ご一報下さい。

ソース

Sub GetTitle()
    
    Dim Driver As New Selenium.WebDriver
    Dim i As Long, j As Long
    Dim txt As String
    Dim theaters() As Variant, theater As Variant
    Dim top_url As String, full_url As String
    
    top_url = "https://www.unitedcinemas.jp/"
    theaters = Array("kokura", "nakama")
    j = 1
    
    Driver.Start "chrome"
    
    For Each theater In theaters
        
        full_url = top_url & theater & "/"
        
        Driver.Get full_url
        Driver.FindElementByCss("#gnavi_film").Click
        Driver.FindElementByCss("#" & theater & "NowShowing").Click
        
        Set elm1 = Driver.FindElementByCss("#showingList > div > ul:nth-child(2)")
        
        
        i = 1
        Worksheets(1).Cells(i, j).Value = theater
        
        For Each elm2 In elm1.FindElementsByTag("h3")
            
            Set elm3 = elm2.FindElementByCss("strong > a")
            txt = elm3.Text
    
            i = i + 1
            Worksheets(1).Cells(i, j).Value = txt
        
        Next
        
        j = j + 1
    
    Next

End Sub

簡単なソースの解説

一応、ざっとソースの説明をしておきます。

「theaters」という配列を作って、その中に「kokura」、「nakama」というメンバーを入れています。

試していませんが、メンバーに「odaiba」を加えればユナイテッド・シネマアクアシティお台場のデータが取得出来ると思います。この部分は、ユナイテッド・シネマ系列の劇場のトップページのURLから抜き出して下さい。

最初のループでは、劇場毎に「上映中」をクリックして、現在上映中の情報を取得して、Excelシートの1列目の1行目に劇場名をセットします。

次のループで、h3設定されている部分から映画のタイトル部分を抜き出して、Excelシートの1列目の1行目に劇場名を入れて、2行目から順に映画のタイトルをセットします。

このループが終われば、次の劇場に移り、2列目に進み繰り返します。

対象のエレメントやセレクターは、Google Chromeのデベロッパーツールで検索して、コピーすれば、そこそこ簡単です。

s-013_111519_055508_PM

完成形

で、動かすと、こんなシートが出来ちゃいました。

s-014_111519_055524_PM

思ったより、簡単でしょう。

最後に

こんなシートで、なにか出来るかと言われても何も出来ません。

今後は、上映スケジュールを抜き出したり、今後の上映予定のタイトルを抜き出す必要があります。

また、他の劇場用のものも作成しないと意味がなかったりします。

将来的には、PythonでWebアプリとか作って…って野望もあります。

まだまだ、ほんの序の口ですが、まずは一歩を踏み出そうと思ったってなところですかね。