Mercurial > eagle-eye
view pyikriam/buildings.py @ 175:9f248c8460ce
Simplize xpath patterns.
- Use 'descendant' aix name simplize patterns.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Sun, 02 Nov 2008 09:59:51 +0800 |
parents | 8f699a9da6c0 |
children | 3ba3edda6d1e |
line wrap: on
line source
from lazy.www import c from lxml import etree from StringIO import StringIO class position(object): def __init__(self, build_type, city_id, idx, baseurl): self._baseurl = baseurl + '/index.php' self.build_type = build_type self.city_id = city_id self.idx = idx self._params = {'view': 'buildingGround', 'id': city_id, 'position': idx} pass def get_page(self): page = c(self._baseurl).get(self._params).get_content() return page pass class townhall(position): xpath_patterns = { 'level': 'div[@class=\'buildingLevel\']/text()' } def __init__(self, city_id, idx, baseurl): super(townhall, self).__init__('townhall', city_id, idx, baseurl) pass def _sync(self, page): parser = etree.HTMLParser(encoding='utf8') page_dom = etree.parse(StringIO(page), parser) xpath_building = '/html/body/descendant::' for name, ptn in self.xpath_patterns.items(): path = xpath_building + ptn value = page_dom.xpath(path)[0] setattr(self, name, value) pass pass def sync(self): page = self.get_page() self._sync(page) pass pass