daily pastebin goal
71%
SHARE
TWEET

Untitled

a guest Aug 8th, 2012 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. import urllib.request, urllib.parse
  4. import re
  5.  
  6. faculty = int(input('Номер факультета: '))
  7.  
  8.  
  9. class Spec():
  10.         def __init__(self, name, priority):
  11.                 self.name = name
  12.                 self.priority = priority
  13.  
  14.                
  15.  
  16. class Abt():
  17.         def __init__(self, name, mark, ob, doc, spec):
  18.                 self.specs = []
  19.                 self.name = name
  20.                 self.mark = mark
  21.                 self.addSpec(spec)
  22.                 self.ob = ob
  23.                 self.doc = doc
  24.                 self.spec = spec
  25.         def addSpec(self, spec):
  26.                 self.specs.append(spec)
  27.                 sorted = False
  28.                 while not sorted:
  29.                         sorted = True
  30.                         for i in range(len(self.specs) - 1):
  31.                                 if self.specs[i].priority > self.specs[i+1].priority:
  32.                                         sorted = False
  33.                                         self.specs[i], self.specs[i+1] = self.specs[i+1], self.specs[i]
  34.  
  35.  
  36. abts = []
  37.  
  38. def sortAbts():
  39.         sorted = False
  40.         while not sorted:
  41.                 sorted = True
  42.                 for i in range(len(abts) - 1):
  43.                         if abts[i].mark < abts[i+1].mark:
  44.                                 sorted = False
  45.                                 abts[i], abts[i+1] = abts[i+1], abts[i]
  46.  
  47.  
  48. def addAbt(abt):
  49.         for i in abts:
  50.                 if abt.name == i.name:
  51.                         i.addSpec(abt.spec)
  52.                         return
  53.         abts.append(abt)
  54.  
  55.  
  56. def printList(abts, mx):
  57.         for i in range(mx):
  58.                 if len(abts) > i:
  59.                         print(str(i + 1) + ". " + abts[i].name + "\t\t" + abts[i].mark + "  " + abts[i].ob)
  60.                 else:
  61.                         print(str(i + 1) + ". <Пусто>")
  62.  
  63. def getList(spec):
  64.  
  65.         print ('Parse: ' + spec.name)
  66.         opt = urllib.parse.urlencode({'budjet':'Б', 'form': 'О', 'dep': str(faculty), 'spec' : spec.name, 'listtype':'2', 'submit': 'Показать'})
  67.         opt = opt.encode('utf-8')
  68.         page = urllib.request.urlopen('http://priem.mai.ru/lists/', opt)
  69.         page = page.read().decode('utf-8')
  70.  
  71.         maxAbitur = re.findall('<h2>Осталось мест: <span class="darkred">(.+?)</span>', page)
  72.  
  73.         if len(maxAbitur) != 0:
  74.                 spec.maxAbt = int(maxAbitur[0])
  75.  
  76.         page = page.replace('<nobr>','').replace('</nobr>','').replace('<br/>', ' ').replace('<td></td>','<td> </td>')
  77.         ege = re.findall('<td>(.+?)</td>', page)
  78.         del ege [0:11:1], ege [-4::1] # удаляем мусор
  79.         # разбиваем на несколько списков
  80.         names = ege[2::7] #имена
  81.         marks = ege[4::7] # баллы (приоритет)
  82.         obs = ege[3::7] # общежитие
  83.         docs = ege[5::7] # тип документа
  84.         abts = []
  85.         for i in range(len(names)):
  86.                 if docs[i] != 'Копия' and docs[i] != 'Забрал документы':
  87.                         spc = Spec(spec.name, marks[i][5])
  88.                         ob = obs[i].replace('&nbsp;', '')
  89.                         abt = Abt(names[i], marks[i][0:3], ob, docs[i], spc)
  90.                         addAbt(abt)
  91.  
  92.  
  93. class SpecListSegment():
  94.         def __init__(self, name, maxAbt):
  95.                 self.name = name
  96.                 self.maxAbt = maxAbt
  97.  
  98. specList = []
  99.  
  100. page = urllib.request.urlopen('http://priem.mai.ru/lists/')
  101. page = page.read().decode('utf-8')
  102. matches = re.findall('<option class="' + str(faculty) + '" value="(.+?)" >',page)
  103.  
  104.  
  105. for i in matches:
  106.         specList.append(SpecListSegment(i, 0))
  107.  
  108.  
  109.  
  110. for i in specList:
  111.         getList(i)
  112.  
  113.  
  114. sortAbts()
  115.  
  116.  
  117.  
  118. outList = []
  119.  
  120. for i in range(len(specList)):
  121.         outList.append([])
  122.  
  123. def check(j):
  124.         for i in range(len(specList)):
  125.                 if specList[i].name == j.name:
  126.                         if len(outList[i]) < specList[i].maxAbt:
  127.                                 return i
  128.                         else:
  129.                                 return -1
  130.  
  131.  
  132.  
  133. for i in abts:
  134.         for j in i.specs:
  135.                 a = check(j)
  136.                 if a != -1:
  137.                         outList[a].append(i)
  138.                         break
  139.  
  140.  
  141. print("\nСписки:")
  142. for i in range(len(outList)):
  143.         print(specList[i].name)
  144.         printList(outList[i], specList[i].maxAbt)
  145.         print()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top