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のほうが使いやすい。

2006年06月13日

Pythonでゲームを作る - Pygame

 Pygameとは、PythonからSDLというマルチメディアライブラリへのアクセスを可能にするラッパーです。これを使うと、簡単に画像やサウンド等をPythonでのプログラミングに使えるようになります。
SDLとPythonは多くのプラットホーム(OS) に移植され対応しているので、pygameを使って書くとマルチプラットホーム対応のゲームが作れます。

Pythonを使えば、面倒なメモリ開放など気にしなくてもいいので楽です。

参考リンク
 ・Pygame
 ・Pygame チュートリアル
 ・PygameではじめるPython入門ツアー


#encoding: shift_jis
import sys
import pygame, pygame.font
import pygame.cursors
from pygame.locals import *


def main():
#initialize
pygame.init()
resolution = 800, 200
screen = pygame.display.set_mode(resolution)
pygame.mouse.set_cursor(*pygame.cursors.diamond)

fg = 250, 240, 230
bg = 5, 5, 5
wincolor = 40, 40, 90

# フォントの場所は各自調整してね。
if sys.platform == 'win32':
msgothic = r'c:\windows\fonts\msgothic.ttc'

else:
msgothic = '/usr/X11R6/lib/X11/fonts/TrueType/msgothic.ttc'

#fill background
screen.fill(wincolor)

#load font, prepare values
font = pygame.font.Font(msgothic, 60)
text = u'漢字フォント'

size = font.size(text)

#no AA, no transparancy, normal
ren = font.render(text, 0, fg, bg)
screen.blit(ren, (10, 10))

#no AA, transparancy, underline
font.set_underline(1)
ren = font.render(text, 0, fg)
screen.blit(ren, (10, 40 + size[1]))
font.set_underline(0)

#AA, no transparancy, bold
font.set_bold(1)
ren = font.render(text, 1, fg, bg)
screen.blit(ren, (30 + size[0], 10))
font.set_bold(0)

#AA, transparancy, italic
font.set_italic(1)
ren = font.render(text, 1, fg)
screen.blit(ren, (30 + size[0], 40 + size[1]))
font.set_italic(0)

#show the surface and await user quit

pygame.display.flip()
while 1:
#use event.wait to keep from polling 100% cpu
if pygame.event.wait().type in (QUIT, KEYDOWN, MOUSEBUTTONDOWN):
break

if __name__ == '__main__':
main()


このサンプルの実行結果


2006年02月25日

Pythonとは?

Python(パイソン)は、Guido van Rossum によって作られたオープンソースのオブジェクト指向スクリプト言語。Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた (Pythonには、爬虫類のニシキヘビの意味があるが、それとは無関係である)。
 - Wikipedia より引用

 このページでは、スクリプト言語 Python の、ちょっとした Tips とヒントを紹介しようと思っています。

Pythonで書かれた主なアプリケーション
 ・ビットトレント
×

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