WEBスクレイピングする~テレ〇限定・今日のドラマ再放送は何やるの?LineBotを作ろうと思う


前回の続きです
いつも大変お世話になっているテレ朝さんの番組情報を取得したかったのですが、程よいWEBAPIは見当たらなかったのでスクレイピングで取得してみたいと思います。

ターゲットとなる情報の在処を探る

テレ朝の公式ホームページにずばり「番組表」というページがありました。
ここから取得してみようと思います。
よく見ると、当日のヘッダー(ここでは4月29日(木))の色が変わっているので当日を特定しやすそうな感じです。

  • Chromeのデベロッパーツールを使ってソースを確認します

  • ページのソースが表示されるので、マウス操作でソースを展開していきます。

タグを選択すると、「そのタグはページのこの部分ですよ」とハイライトを当ててくれるので、あちこち触ってみて目当ての情報を探し出します。ぐりぐり探していくと、当日の番組列に当たりました。「今日」は「today」で指定されていました。これはいけそうです。

14:47科捜研の女を発見しました! 科捜研大好き。何度見ても楽しめる。いつもありがとう!
開始時刻はclass=min 番組タイトルはbangumiDetailOpenで設定されているようです。

cheerio-httpcliを使ってスクレイピングする

前回発見したNode.js用の素敵なスクレイピングモジュール(cheerio-httpcli)をつかって再放送ゴールデンタイムの情報を取得します。
こんなコードにしてみました。

scraping.js
//スーパー再放送タイムの設定
const ssstarttime = '13:46';
const ssendtime = '16:30';

let client = require('cheerio-httpcli');

client.fetch('https://www.tv-asahi.co.jp/bangumi/', {}, function (err, $, res) {

    //当日の番組一覧を取得して配列に入れる
    let tvinfo = [];
    let r = 0;

    //bangumiDetailOpenを指定して番組タイトルを取得する
    $('.new_table .today .new_day .prog_name .bangumiDetailOpen').each(function () {

        tvinfo[r] = [];
        tvinfo[r][0] = $(this).text();
        tvinfo[r][1] = "";
        r = r + 1;

    });

    //開始時間を配列に格納する
    let c = 0;
    //minを指定して放送開始時刻を取得する
    $('.new_table .today .new_day .min').each(function () {

        let title = $(this).text();
        tvinfo[c][1] = title.trim();    //空白が入っているので削除する
        c = c + 1;

    });

    //スーパー再放送タイムか確認
    let conststr = '2000/01/01 ';

    let starttime = new Date(conststr + ssstarttime);
    let endtime = new Date(conststr + ssendtime);
    let tempdatestr;
    let targettime;


    for (let t = 0; t < tvinfo.length; t++) {

        //判定
        tempdatestr = conststr + tvinfo[t][1];   //番組表から取得した各番組の開始時刻で日付の文字列を生成
        targettime = Date.parse(tempdatestr);

        //スーパー再放送タイムであるか判定
        if (targettime > starttime && targettime < endtime) {

            console.log(tvinfo[t][0]);
        }


    }


});

今日は、科捜研、科捜研、相棒だったようです。いいね!

PS C:\project\homework02> node scraping.js
科捜研の女13 #1
科捜研の女13 #2
相棒15 #11

個人的スーパー再放送タイムが変わってしまったり、そもそもページ構成が変わってしまったら、使いものにならなくなるのはWEBスクレイピングを使った仕掛けの仕方ないところ、、、でしょうか。。
とりあえず「テレ〇限定・今日の。。。。。LineBot」の一部ができました。

今日はここまで おつかれさまでしたー