예제 #1
0
def get_effects(head):
    effects = []

    # かならず「減少/増加」効果がある前提で実装している
    node = head.findNext(lambda tag: tag.name == 'span'
                         and tag.find(text=re.compile(u'減少|増加')))
    if not node:
        logging.warning(u'効果が存在しません: ' + parse_helper.get_string(head));
        return effects

    for effect in node.parent.findAll('span'):
        effect = parse_helper.parse_effect(parse_helper.get_string(effect))
        if effect:
            effects.append(effect)
    return effects
예제 #2
0
    def parse_upgrade_sequences(self, body, upgrades):
        '''おすすめ改造を解析し、 Weapon として登録する
        '''

        try:
            seq_name_re = re.compile(ur'(.*式.*)')
    
            seqs = body.findAll(lambda tag: tag.name == u'h4' and
                                tag.find(text = seq_name_re))

            list = []
            for seq in seqs:
                name = get_string(seq)
                text = get_string(seq.findNext('p', 'quotation'))
                seq = self.parse_upgrade_sequence(text, upgrades)
                list.append({'name': name, 'upgrades': seq})

            return list
        except Exception, e:
            raise ParseException(u'改造式の解析に失敗しました, %s' % e.message)
예제 #3
0
    def parse_basic_info(self, body, item):
        '''武器の基本情報を解析し、 item へ登録'''

        table = body.findAll('table')[0]
        item['category'] = get_string(get_td(table, u'分類'))
        item['range'] = to_int(get_td(table, u'射程'))
        item['attack'] = to_min_max(get_td(table, u'攻撃'))
        item['durability'] = to_int(get_td(table, u'耐久'))
        item['wound'] = to_min_max(get_td(table, u'負傷率'))
        item['critical'] = to_int(get_td(table, u'クリティカル'))
        item['balance'] = to_int(get_td(table, u'バランス'))
        item['ug'] = to_int(get_td(table, u'UG'))
예제 #4
0
    def parse_upgrades(self, table):
        '''改造情報を解析する'''

        result = []
        for tr in table.tbody('tr'):
            if len(tr) < 5: continue
            
            item = {}
            item['name'] = get_string(tr('td')[0])
            item['proficiency'] = to_int(tr('td')[1])
            item['ug'] = to_min_max(tr('td')[3])
            item['cost'] = to_cost(tr('td')[4])
            item['effects'] = self.parse_effects(tr('td')[2])
            result.append(item)
        return result
예제 #5
0
    def parse_item(self, table):
        '''1アイテムパースする'''

        header_name = ['h2', 'h3', 'h4']

        #a = th.findNext('td').find('a')
        header = table.findPrevious(header_name)
        item = {}
        name = self.parse_header(parse_helper.get_string(header))
        item['name'] = name

        td = parse_helper.get_td(table, u'詳細ページ')
        if td:
            if not td.a:
                logging.warning(u'詳細ページがありません: ' + name)
            else:
                url = td.a['href']
                item['url'] = url

        return item
예제 #6
0
def get_item(head):
    '''タイトル情報を取得する'''

    try:
        name = get_name(head)
        if not name:
            return None

        item = {'name': name}

        if name not in no_effect_titles:
            item['effects'] = get_effects(head)
        else:
            item['effects'] = []
        
        return item
    except ParseException, e:
        e = ParseException(parse_helper.get_string(head) + u' ' + e.message)
        # print e.message
        raise e
예제 #7
0
def get_name(head):
    '''タイトルの名称を取得する'''
    s = parse_helper.get_string(head)
    m = name_re.match(s)
    s = m.group(1)
    return s