2010年05月03日

HTMLを解析(スクレイピング)する

HTML解析に使用するライブラリ

・BeautifulSoup.py
 Pure-Python で書かれている。大きなページだと処理速度は遅い。

・HTMLの解析は、やはり、XPathで行うのが簡単でラク。

XPath が使える主なHTML解析ライブラリには、
  lxmllibxml2
 の2つがある。

XPath 言語仕様

1. lxmlを使った例

finance.yahoo.comから、グーグルの最新株価を取得する
import urllib
import lxml.html

fd = urllib.urlopen('http://finance.yahoo.com/q?s=GOOG')
s = fd.read().decode('utf-8')
xRoot = lxml.html.fromstring(s)
path = '''string(
//tr[
th/text() = 'Last Trade:' or
th/text() = 'Index Value:'
]/td[1])'''


print xRoot.xpath(path)



・2. libxml2を使った例
import libxml2
doc = libxml2.htmlReadFile('http://www.yahoo.co.jp', 'utf-8'
libxml2.HTML_PARSE_RECOVER |
libxml2.HTML_PARSE_NOERROR |
libxml2.HTML_PARSE_NOWARNING
)
#全てのAタグのリンク先を表示する
nodes = doc.xpathEval("//a[@href]")
links = list([x.prop('href') for x in nodes])
doc.freeDoc()
print links

注意) libxml2 のPythonバインディングは、メモリ管理を手動で行う必要がある。freeDoc(), xpathFreeContext() を忘れると、すぐにメモリリークする。

def debugRun():
debugMemory(1)
try:
main() #メモリリークをテスト
finally:
cleanupParser()
print "Memory leak %d bytes" % (debugMemory(1))
dumpMemory()


現時点では、lxmlのほうが使いやすい。

この記事へのコメント
Posted by at 2010年05月03日 15:42
TBありがとうございます。
Pythonは、経験ないのですが大変興味があります。

最近、スクレイピング、マッシュアップみたいなことができておりませんが、なにか記事ができましたら書きますのでまたよろしくお願いいたします。

マサ
Posted by マサ at 2010年05月03日 18:09
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/148611391
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。