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

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

#2.目標
 - ターミナル上のコマンド一つで、来週の金曜日に放送される映画のタイトルを表示させる。
 - その際、金曜ロードショーのラインナップのページ([https://kinro.jointv.jp/lineup](https://kinro.jointv.jp/lineup))を、PythonのBeautiful Soupを使ってスクレイピングする。予め、スクレイピングするページの構造を見ておこう。

```html:金曜ロードショー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で

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

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

#4. コードの解説
##4.1. Webページの読込
最初の2行。

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

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

```Python: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行目。

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

6行目で

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

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

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

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

```
名探偵コナン　純黒の悪夢（ナイトメア）
```

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


#5. 参考URL
##5.1. スクレイピングに関して
 - http://qiita.com/rusarusa/items/d7f014ba80d6fe7a3e07
 - https://www.crummy.com/software/BeautifulSoup/bs4/doc/

##5.2. 日付操作に関して
 - http://www.python-izm.com/contents/basis/date.shtml
 - http://pythoncode.blog.fc2.com/blog-entry-19.html
 - http://qiita.com/knqyf263/items/c806d9a157004c8f1155