- 459 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 18:43:16 ]
- BeautifulSoup/2to3 挑戦してみた。
1. 2to3 BeautifulSoup.py | patch BeautifulSoup.py 2. 3k に sgmllib がない。2.6から持ってくる。 3. sgmllib内 warnings.warnpy3k 辺りはいらないので削除。 4. 2to3 sgmllib.py | patch sgmllib.py 5. 3.0 で import BeautifulSoup が通る。 6. re.match, re.search 等に bytes オブジェクトが渡っている所を str() で wrap 数箇所修正。(実行してエラーが出た箇所を潰していく) 7. BeautifulSoup(text).prettify() がエラーなしに動く。 8. 文字列が全て <b'font' b'size'="b'-1'"> の様になっているのに気付く。 str(b"foo") が "b'foo'" という文字列を返す為。.decode()で文字列に変換する必要がある。 9. PageElement.toEncoding, NavigableString.__str__ が bytes を返すのを .decode(encoding) で str に。 ※ 他にも bytes を返すメソッドがあるかも知れない。 ※ 2.x 互換の方法が解らなかった為、ここは 3.0 のコードを変更した。 10. ここまでで .prettify() 通った。diff取るの忘れたけど手作業で変更したのは5,6箇所程。 ※ 2.x では decode/encode して端末へ表示してたのが、3.0では不要になった。 .prettify()の返す文字の文字コードが異なる?修正が影響したのかどうかは追ってない。
|

|