BeautifulSoupとhtml5libでのパース

| トラックバック(0)
lxmlを使ってパースするのもいいです。下記にまとめました(2011/1/30)。
Pythonで日本語ページのパース:lxmlでの日本語文字化け回避
BeautifulSoupは、タグ内に'<'があると挙動がおかしくなる。
たとえばアクセス解析用とかにみるスクリプトタグかな。(GoogleAnalyticsはそこらへんちゃんとしてるね。)
たとえば次のような場合:
<script type="text/javascript">
<!--
document.write('<scr' + 'ipt type="text/javascr' + 'ipt" src="http://gavit.nikkei.co.jp/js.ng/cat=frttll?time=' + new Date().getTime() + '"></scr' + 'ipt>');
-->
</script>
こんなのがあると、
HTMLParser.HTMLParseError: bad end tag: u"", at line 186, column 141
なんて感じ。
html5libはちゃんと喰ってくれるね。
#!C:\Python25\python.exe
# coding:utf-8

from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup
from html5lib import HTMLParser
from html5lib import treebuilders
import traceback

def useBeautifulSoup(url_path):
    page = urlopen(url_path)
    try:
        soup = BeautifulSoup(page.read())
        print soup.head.title
    except:
        print '** Error **'
        print traceback.print_exc()

def useHtml5lib(url_path):
    page = urlopen(url_path)
    parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
    soup = parser.parse(page.read()) 
    print soup.head.title

if __name__ == '__main__':
    url = 'http://www.nikkei.co.jp/'
    useBeautifulSoup(url)
    useHtml5lib(url)

トラックバック(0)

トラックバックURL: http://www.flotsam-fareast.com/mt425/mt-tb.cgi/4