そむたむログ

勉強記録や日々の気づきをログに残していきます

CNN10から日本に関するニュースがあった日を抽出する

私はCNN10をCNN Student Newsの時代から気が向いたときにPodcastで視聴しています。

CNN10とは

CNN10はアメリカのニュース番組です。

CNNスチューデントニュース(シイエヌエヌスチューデントニュース、CNN Student News)は、アメリカ合衆国のニュース専門チャンネル「CNN」で制作、CNN系列のニュース専門チャンネル「HLN」で放送されている報道教養番組である。2017年1月6日から番組名がCNN10(シイエヌエヌステン)に変更された。 CNNで放送されるニュースを題材に、主に高校生の授業の補助教材として活用されることを目的とした番組である。最新の世界の時事情勢について、その基本的な知識やニュースの背景をクイズも交えながら解説するものである。
日本ではNHK BS1で平日(月-金深夜=火-土未明)3:30 - 3:40、再放送は翌日(金曜深夜分は次週月曜)15:10 - 15:20[1]に日本語訳して放送されている。「CNN10」に番組名変更後も番組名は「CNNスチューデントニュース」のままである。
なお、6月上旬から8月上旬はアメリカ合衆国の学校が夏休み(アメリカの場合9月が新年度、8月が年度末であるが、学校の授業自体は6月初めが学期末)であるため、この期間は休止となり、この期間は別のミニ番組か、ワールドニュースに充てる。

私がCNN10を見ていてテンションが上がるとき

それは日本のニュースが登場したとき!
日本でも報じられているような政治のニュースだけでなく、日本のゲームセンターに高齢者が多い話ですとか日本人がおもしろいギネス記録を打ち立てた話ですとか自分が日本の報道で目にしなかったようなニュースも登場してくるので楽しく見ています。

とはいえ、アメリカのニュースなので日本のニュースが取り上げられるのは体感月に1、2回程度です。そこで効率よく日本のニュースが網羅的に探せるようなツールがほしくて今回コードを書きました!

今回やったこと

CNNではTranscriptというニュースの文字おこしを毎日置いています。ですのでそのページを開いてJapanやJapaneseといった単語があれば日本のニュースがある日として拾ってくれるツールを作りました
スクレイピングにはBeautifulSoupを使っています。

TRANSCRIPTのリンクに一覧ページでは日付の新しい順にその日のニュースの文字起こしページへのリンクがあります。
CNN.com - Transcripts
f:id:somtamchan:20171111081150p:plain

上のリンクから順番にhtmlを取得し、半角スペースで区切った単語をリストに格納した上でリストに最初に設定したword_listに格納した単語と一致する単語が含まれていれば該当するhtmlへリンクするURLを表示します。
ツッコミどころなどあるかもしれませんがそこは指摘してくださると幸いです。

import urllib.request
from bs4 import BeautifulSoup

# 検索したい単語をリストに格納
word_list = ['Japan', 'Japanese']

cnn10_url = 'http://edition.cnn.com/TRANSCRIPTS/sn.html'
html_link = urllib.request.urlopen(cnn10_url)
soup_link = BeautifulSoup(html_link, "lxml")
div_link = soup_link.find_all('div', class_="cnnSectBulletItems")

for i in div_link:
    a = (i.find('a'))
    path_a = a['href']
    path = "http://edition.cnn.com"
    url = path + path_a
    html = urllib.request.urlopen(url)
    soup = BeautifulSoup(html, "lxml")
    s = str(soup)
    body = s.split(' ') 
    word_bool = False
    for test_word in word_list:
        if test_word in body:
            word_bool = True
    if word_bool == True:
        print(url)
これからやりたいこと

現状で日本のニュースが含まれる日のリンクは取得できるようになり最低限の成果は得られたのですが、見えているだけで問題が2つあります。

  • 探索する日付の範囲を指定できない

TRANSCRIPTページに含まれるすべての日のリンクをループで回してしまっているため、すべて回し切るのに時間がかかっています。
また、特定の期間のみで探索することもできません。

  • 記号を排除できていない

htmlから単語をリストに入れる際に半角スペースで区切っているだけなので記号が単語についたままになっています。
例)Japan, などカンマなどが単語についていることがある
すべてのパターンを考えて最初の探索する単語のリストに入れないと必要な情報を取りこぼしてしまいます。

できる人なら瞬殺なんだと思いますが、おいおい考えて見たいと思います。