文字列⇒日付変換
文字列を日付型に変換する方法。
>>> #coding: utf-8 ... >>> import datetime >>> import time >>> dd = '2009年10月21日' >>> st = time.strptime(dd, '%Y年%m月%d日') >>> dt = datetime.date(st.tm_year, st.tm_mon, st.tm_mday) >>> print dt 2009-10-21
で、これをHTML解析で応用してみる。
<table>タグの中のセル(<td>タグ)に、yyyy年mm月dd日、という書式で日付が入っているのを、BeautifulSoupで解析するというケースを考える。
soup = BeautifulSoup.BeautifulSoup(html) tdSoup = soup.findAll("td") if tdSoup: dd = tdSoup[0].string ・・・(1) st = time.strptime(dd, '%Y年%m月%d日') ・・・(2) dt = datetime.date(st.tm_year, st.tm_mon, st.tm_mday)
みたいな感じでできるかなと思ったのだが、(2)のところでコケてしまう。エラーメッセージは以下。
ValueError: time data did not match format: data=2009年10月21日 fmt=%Y年%m月%d日
ログられてる値を見ても、とくにおかしくはないんだけど、試行錯誤の結果、(1)の部分を次のように変更したら通った。
dd = tdSoup[0].renderContents() ・・・(1')
tdSoup[0]には、自身のタグ(今回の場合は<td></td>)も含まれた状態で格納されているので、(1)では、それの中身を取り出すために、.stringを使っているが、それで文字列化したつもりなのに、コケる。一方、renderContents()は、tdSoup[0]から、自身のタグを取り除いた結果を返してくれるものだそうであるが、これだとOK。
理屈がよくわからないのだが、とりあえずメモっておく。
参考:http://www.panopticon.jp/blog/2007/11/182337.html