lxmlを使ってパースするのもいいです。下記にまとめました(2011/1/30)。
「Pythonで日本語ページのパース:lxmlでの日本語文字化け回避」
「Pythonで日本語ページのパース:lxmlでの日本語文字化け回避」
BeautifulSoupは、タグ内に'<'があると挙動がおかしくなる。
たとえばアクセス解析用とかにみるスクリプトタグかな。(GoogleAnalyticsはそこらへんちゃんとしてるね。)
たとえば次のような場合:
html5libはちゃんと喰ってくれるね。
たとえばアクセス解析用とかにみるスクリプトタグかな。(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)

コメントする