かずきち。の日記

サーバサイドエンジニアのつぶやき

番組表をスクレイピング

端末でサーバにつなぐコマンド

ssh hoge@hoge.com


iEPGの取得
あとは時刻指定で自動でプログラムを走らせて、前後1週間のiEPG情報を保持しよっと。
結局crontabのコマンド勉強してないからやらないとな…

#/user/local/bin/python
# -*- coding: utf-8 -*-

import urllib
import urllib2
import httplib
import re
import codecs
import sys
import datetime
from BeautifulSoup import BeautifulSoup

##download program##
programday = datetime.date.today() + datetime.timedelta(1)

programday = re.sub("-", "", str(programday))

site = 'http://hoge.ne.jp/chart/hoge.action?head='+programday+'0000'
    
urllib.urlretrieve(site,'Data/'+str(programday)+'.html')

##analysis program##
data = 'Data/'+str(programday)+'.html'

f= open(data)

html = f.read()

f.close()

soup = BeautifulSoup(html)

##download iepg##
for i in range(len(soup('a', title='iEPG'))):

    print soup('a', title='iEPG')[i]['href']

    iEPG = soup('a', title='iEPG')[i]['href']

    day = datetime.date.today()
    
    urllib.urlretrieve('http://hoge.ne.jp'+iEPG,'iEPG/iepg'+str(day)+'-'+str(i)+'.tvpi')

    ##open iepg##
    iepgData = {}
    pattern = re.compile("(.+?): (.+)")
    
    ##analysis iepg##
    for line in open('iEPG/iepg'+str(day)+'-'+str(i)+'.tvpi',"r"):
        m = pattern.search(line)

        if m:
            iepgData[m.group(1)] = unicode(m.group(2),"shift_jis").encode("utf-8")
            print iepgData[m.group(1)]
        else:
            content = unicode(line,"shift_jis").encode("utf-8")

    for k in iepgData.keys():
        print k+":"+iepgData[k]
    print content


結果のサンプルは

/iepg.tvpi?id=101024200910152330
application/x-tv-program-info; charset=shift_jis

1

NHK総合

2009

10

15

23:30

00:10

きょうのニュース&スポーツ ▽時論公論・どうなる 来年度の予算編成

69

1

end:00:10

version:1

program-title:きょうのニュース&スポーツ ▽時論公論・どうなる 来年度の予算編成

month:10

start:23:30

station:NHK総合

year:2009

date:15

genre:69

subgenre:1

Content-type:application/x-tv-program-info; charset=shift_jis

藤井彩子NHK解説委員…下境博