# -*- coding: utf-8 -*-
__author__ = 'DarkTwin'
import lxml.html
import time
#отмечаем время начала работы скрипта
start = time.time()
#передаем в lxml отчет
PR = xml = lxml.html.document_fromstring(open('test.html').read().decode('utf-8'))
ab_namber = PR.xpath('//td[class="s3"]/text()') # номер обанента
data = PR.xpath('//td[class="s13"]/text()') # дата записи
dop = PR.xpath('//td[class="s14"]/text()') # центральная часть таблицы
cost = PR.xpath('//td[class="s15"]/text()') # стоимость услуги
#удаляем повторения в номерах обонентов с сохранением последовательности и выводим данные
ab_namber = [v for i,v in enumerate(ab_namber) if v not in ab_namber[:i]]
for i in (i for i,x in enumerate(ab_namber)):
print ab_namber[i]
#делаем срезы с интересующими нас данными
time_val = dop[0:len(dop):6] # срез по колонке время
ab_namber = dop[1:len(dop):6] # срез по колонке абонентский номер
time_cost = dop[2:len(dop):6] # срез по колонке количество единиц услуги
type_of_service = dop[4:len(dop):6] # срез по колонке вид услуги
#если все хорошо то количество записей в колонке даты будет ровно количеству записей в стоимости
if len(data) == len(cost):
for i in (i for i,x in enumerate(cost) if x != '0.00'): # нас интересуют строки с не нулевой стоимостью
print data[i], time_val[i], ab_namber[i], time_cost[i], type_of_service[i], cost[i]
#как итог
print u'Всего значений-', len(cost), u'из них без стоимости-',
cost.count('0.00'), u'интересующух строк-', len(cost)-cost.count('0.00')
else:
print 'error'
#отмечаем время окончания работы скрипта и выводим значение
finish = time.time()
print (finish - start)