LoginSignup
13
26

More than 5 years have passed since last update.

Webスクレイピング初心者が、来週の金曜ロードショーの映画名を取得するコマンド作ってみた

Last updated at Posted at 2017-02-10

1. 概要

今週の金曜ロードショーの映画が何か、いちいちテレビ欄をチェックするのは面倒。
そこで、PythonのWebスクレイピングを用いて、PCのターミナル上からコマンド一つで金曜ロードショーの映画名を取得することが出来ないかと考えた。

2.目標

  • ターミナル上のコマンド一つで、来週の金曜日に放送される映画のタイトルを表示させる。
  • その際、金曜ロードショーのラインナップのページ(https://kinro.jointv.jp/lineup)を、PythonのBeautiful Soupを使ってスクレイピングする。予め、スクレイピングするページの構造を見ておこう。
金曜ロードショーWebサイト
...
<li>
  <div class="photo">
    <a href='/lineup/20170414'>
      <img src="https://dtg3yjoeemd2c.cloudfront.net/pic/lineup/20170414/photo01_p62bphcy8m.jpg" alt="名探偵コナン 純黒の悪夢(ナイトメア)" />
    </a>
  </div>
...
</li>

<li>
  <div class="photo">
    <a href='/lineup/20170421'>
      <img src="https://dtg3yjoeemd2c.cloudfront.net/pic/lineup/20170421/photo01_uyxdjywd.jpg" alt="シンデレラ" />
    </a>
  </div>
...
</li>

<li>
  <div class="photo">
    <a href='/lineup/20170428'>
      <img src="https://dtg3yjoeemd2c.cloudfront.net/pic/lineup/20170428/photo01_9txwertpu3.jpg" alt="ワイルド・スピード スカイミッション" />
    </a>
  </div>
...
</li>
...

3.コード

kinro.py
#coding:utf-8

import urllib.request
import datetime
from bs4 import BeautifulSoup


def func():
    html = urllib.request.urlopen("https://kinro.jointv.jp/lineup")
    soup = BeautifulSoup(html, "lxml")
    today = datetime.date.today()
    nextFriday = today + datetime.timedelta(days = (4 - today.weekday()) % 7)
    strnextFriday = nextFriday.strftime("%Y%m%d")
    a = soup.find_all("a", href = "/lineup/" + strnextFriday)
    tmp = a[0].find("img")
    title = tmp.attrs['alt']
    print(title)

if __name__ == '__main__':
    func()

ターミナルを開き、このコードと同じディレクトリで、

$python kinro.py

というコマンドを実行して、

名探偵コナン 純黒の悪夢(ナイトメア)  # 2017年4月14日以内
シンデレラ  # 2017年4月15日~21日

のように映画のタイトルが表示されれば成功。

勿論、.barhrcで

alias kinro='python ~/my_dir/kinro.py'  #ディレクトリ名は環境に合わせる

みたいにこのコマンドを定義しておけば、どのディレクトリ上でも$kinroのコマンド1つで来週の金曜ロードショーの映画名を取得できる。

4. コードの解説

4.1. Webページの読込

最初の2行。

kinro.py(一部)
html = urllib.request.urlopen("https://kinro.jointv.jp/lineup")
soup = BeautifulSoup(html, "lxml")

4.2. 来週の金曜日の日付の取得

3~5行目。今日の日付を取得して、そこから来週の金曜日までの日数差を計算している。

kinro.py(一部)
today = datetime.date.today()
nextFriday = today + datetime.timedelta(days = (4 - today.weekday()) % 7)
strnextFriday = nextFriday.strftime("%Y%m%d")

4.3. 映画名の取得・出力

6~9行目。

kinro.py(一部)
a = soup.find_all("a", href = "/lineup/" + strnextFriday)
tmp = a[0].find("img")
title = tmp.attrs['alt']
print(title)

6行目で

金曜ロードショーWebサイト
<a href='/lineup/20170414'>
  <img src="https://dtg3yjoeemd2c.cloudfront.net/pic/lineup/20170414/photo01_p62bphcy8m.jpg" alt="名探偵コナン 純黒の悪夢(ナイトメア)" />
</a>

の部分を取り出し、7行目でそこから更に

金曜ロードショーWebサイト
<img src="https://dtg3yjoeemd2c.cloudfront.net/pic/lineup/20170414/photo01_p62bphcy8m.jpg" alt="名探偵コナン 純黒の悪夢(ナイトメア)" />

を、8行目では更にそこから

名探偵コナン 純黒の悪夢(ナイトメア)

の部分だけを取り出している。

5. 参考URL

5.1. スクレイピングに関して

5.2. 日付操作に関して

13
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
26