Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # coding=utf-8
- import urllib.request, urllib.parse
- import re
- faculty = int(input('Номер факультета: '))
- class Spec():
- def __init__(self, name, priority):
- self.name = name
- self.priority = priority
- class Abt():
- def __init__(self, name, mark, ob, doc, spec):
- self.specs = []
- self.name = name
- self.mark = mark
- self.addSpec(spec)
- self.ob = ob
- self.doc = doc
- self.spec = spec
- def addSpec(self, spec):
- self.specs.append(spec)
- sorted = False
- while not sorted:
- sorted = True
- for i in range(len(self.specs) - 1):
- if self.specs[i].priority > self.specs[i+1].priority:
- sorted = False
- self.specs[i], self.specs[i+1] = self.specs[i+1], self.specs[i]
- abts = []
- def sortAbts():
- sorted = False
- while not sorted:
- sorted = True
- for i in range(len(abts) - 1):
- if abts[i].mark < abts[i+1].mark:
- sorted = False
- abts[i], abts[i+1] = abts[i+1], abts[i]
- def addAbt(abt):
- for i in abts:
- if abt.name == i.name:
- i.addSpec(abt.spec)
- return
- abts.append(abt)
- def printList(abts, mx):
- for i in range(mx):
- if len(abts) > i:
- print(str(i + 1) + ". " + abts[i].name + "\t\t" + abts[i].mark + " " + abts[i].ob)
- else:
- print(str(i + 1) + ". <Пусто>")
- def getList(spec):
- print ('Parse: ' + spec.name)
- opt = urllib.parse.urlencode({'budjet':'Б', 'form': 'О', 'dep': str(faculty), 'spec' : spec.name, 'listtype':'2', 'submit': 'Показать'})
- opt = opt.encode('utf-8')
- page = urllib.request.urlopen('http://priem.mai.ru/lists/', opt)
- page = page.read().decode('utf-8')
- maxAbitur = re.findall('<h2>Осталось мест: <span class="darkred">(.+?)</span>', page)
- if len(maxAbitur) != 0:
- spec.maxAbt = int(maxAbitur[0])
- page = page.replace('<nobr>','').replace('</nobr>','').replace('<br/>', ' ').replace('<td></td>','<td> </td>')
- ege = re.findall('<td>(.+?)</td>', page)
- del ege [0:11:1], ege [-4::1] # удаляем мусор
- # разбиваем на несколько списков
- names = ege[2::7] #имена
- marks = ege[4::7] # баллы (приоритет)
- obs = ege[3::7] # общежитие
- docs = ege[5::7] # тип документа
- abts = []
- for i in range(len(names)):
- if docs[i] != 'Копия' and docs[i] != 'Забрал документы':
- spc = Spec(spec.name, marks[i][5])
- ob = obs[i].replace(' ', '')
- abt = Abt(names[i], marks[i][0:3], ob, docs[i], spc)
- addAbt(abt)
- class SpecListSegment():
- def __init__(self, name, maxAbt):
- self.name = name
- self.maxAbt = maxAbt
- specList = []
- page = urllib.request.urlopen('http://priem.mai.ru/lists/')
- page = page.read().decode('utf-8')
- matches = re.findall('<option class="' + str(faculty) + '" value="(.+?)" >',page)
- for i in matches:
- specList.append(SpecListSegment(i, 0))
- for i in specList:
- getList(i)
- sortAbts()
- outList = []
- for i in range(len(specList)):
- outList.append([])
- def check(j):
- for i in range(len(specList)):
- if specList[i].name == j.name:
- if len(outList[i]) < specList[i].maxAbt:
- return i
- else:
- return -1
- for i in abts:
- for j in i.specs:
- a = check(j)
- if a != -1:
- outList[a].append(i)
- break
- print("\nСписки:")
- for i in range(len(outList)):
- print(specList[i].name)
- printList(outList[i], specList[i].maxAbt)
- print()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement