2013年2月17日日曜日

BeautifulSoup4で遊んでみた

mac portでsearchしてるとbs4っていうのを見かけたので、なんだろ?って 思ったら、互換性も若干無くなってversion4になってたのね。 
使い方を調べて、ついでにとあるCD買ったページで結局何枚買ったかソートするコードを書いてみた。
ちょーいいかげんなコードだけど、こんなのでも簡単にかけた。
import re

if __name__ == "__main__":
    from bs4 import BeautifulSoup
    f = open('5th-cd.html', 'r')

    soup = BeautifulSoup(f)
    soup.unicode
    part_tr = soup.find('table', attrs={'summary': u'ご注文商品'})

    part_tr2 = part_tr.find_parent().find_parent().find_parent()
    events = []
    for num, cd in zip(part_tr2.find_all('th', recursive=True), part_tr2.find_all('td', recursive=True)):
        if re.search(u'点', unicode(num.text)):
            try:
                artist, title1, title2, title3, event_day, event_hall, event_sch, member, extra = cd.text.strip().split()
                event_day = event_day.strip(u'※')
            except ValueError:
                continue   #数があわないのは商品でない
            cd_amount = num.text.strip().strip(u'点')
            try:
                events.append(u"%s, %s, %s, %s, %s" % (event_day, event_sch, member, event_hall, cd_amount))
            except IndexError:
                continue        # 商品以外もテーブルで抜くので一致しないことがある
            except NameError:
                continue
            del cd_amount

    events.sort()
    for event in events:
        print event