pythonで情報抽出
某大学図書館のカレンダーがical形式でないのが面白くないので、自動生成できないかと約10年ぶりにやってみました。
pythonなcodeは初めてです。継ぎ接ぎコード。
# -*- coding: utf-8 -*- # これで日本語が使える import urllib2 #webからデータを取ってくる import codecs #s-jis対応 import re #正規表現とか from HTMLParser import HTMLParser #htmlタグを分解 class Testparser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.holidays=[] #休日を入れる self.shortdays=[] #短かい日を入れる self.holidayFlag="" self.shortdayFlag="" self.date="" #日付 self.campusFlag="" def handle_starttag(self, tag, attrs): holiday_style='255, 204, 153' shortday_style='204, 255, 255' if tag == "td": attrs = dict(attrs) if "style" in attrs: if re.search(holiday_style,attrs['style']): self.holidayFlag = attrs["style"] if re.search(shortday_style,attrs['style']): self.shortdayFlag = attrs["style"] def handle_endtag(self, tag): if tag == "td": if self.holidayFlag: self.holidays.append((self.date)) if self.shortdayFlag: self.shortdays.append((self.date)) self.holidayFlag = self.shortdayFlag = self.date = "" def handle_data(self, data): tmp = data.strip() if re.search(u'寝屋川キャンパス',tmp): self.campusFlag = tmp if re.search(u'キャンパス',tmp): self.campusFlag = tmp if self.campusFlag == u'寝屋川キャンパス': if self.holidayFlag: self.date += tmp if self.shortdayFlag: self.date += tmp if __name__ == "__main__": # htmldata = urllib2.urlopen("http://www.lib.osakac.ac.jp/guide/ca.htm") # htmldata= unicode(open("ca.html"),'utf-8') htmldata = codecs.open('ca.html', 'r', 's-jis') parser = Testparser() parser.feed(htmldata.read()) while(True): try: parser.holidays.remove("") except ValueError: break print "holidays" for i in range(len(parser.holidays)): print (parser.holidays[i]) print "shortdays" for i in range(len(parser.shortdays)): print (parser.shortdays[i]) parser.close() htmldata.close()