Pull to refresh

Посчитай голоса сам

Reading time3 min
Views494

Посчитай голоса сам.



Итак, ввиду ряда причин я слежу за выборами в Украине.
И вот пришла мне в голову интересная идея — а давай посчитаем голоса сами?

Для начала — cvk.gov.ua/vp2010/wp335pt001f01=701.html можно получить список всех городов
Если открыть страницу города(например cvk.gov.ua/vp2010/wp336pt001f01=701pt005f01=1.html) то там есть таблица всех отделений и конкретные цифры для них.

Итого план:
  • парсим страницу со списком городов
  • парсим страницу каждого города
  • суммируем цифры по каждому участку.
  • кешируем результаты запросов что бы нас не забанили


Погнали?:

  1. #! /usr/bin/python
  2.  
  3. from urllib import urlopen
  4. import re
  5. import os
  6. import os.path
  7.  
  8. def getUrl(url):
  9.         print "get url - " + url
  10.         if os.path.exists("/home/user/cwk/" + url):
  11.                 print "file from cache"
  12.                 text = open("/home/user/cwk/" + url, 'r').read()
  13.                 return text
  14.         print "Load url first time"
  15.         proxies = {'http': 'http://localhost:3128'}
  16.         text = urlopen("http://cvk.gov.ua/vp2010/" + url, proxies=proxies).read()
  17.         f = open("/home/user/cwk/" + url, 'w')
  18.         f.write(text)
  19.         f.close()
  20.         return text
  21.  
  22.  
  23.  
  24. #Get the request id key
  25. text = getUrl('wp335pt001f01=701.html')
  26. #print text
  27. links = re.findall("class=a1\\s*href=\"([^\"]+)\"", text, re.IGNORECASE or re.MULTILINE)
  28. #links now contains all the links to get
  29. totalData = [0, 0, 0, 0, 0]
  30. for link in links:
  31.         print link
  32.         text = getUrl(link)
  33.         tableData = re.findall("\\s*<td class=td2small align=center>(\\d+)\\s*<td class=td2small align=center>(\\d+)\\s*<td class=td2small align=center>(\\d+)\\s*<td class=td2small align=center>(\\d+)\\s*<td class=td2small align=center>(\\d+)", text, re.IGNORECASE or re.MULTILINE)
  34.         for data in tableData:
  35.                 totalData[0] += int(data[0])
  36.                 totalData[1] += int(data[1])
  37.                 totalData[2] += int(data[2])
  38.                 totalData[3] += int(data[3])
  39.                 totalData[4] += int(data[4])
  40.  
  41. print "Total votes count - " + str(totalData[0])
  42. print "Invalid votes count - " +str(totalData[1]) + " (" + str(float(totalData[1]) / float(totalData[0])) + "%)"
  43. print "Support Tymoshenko - " +str(totalData[2]) + " (" + str(float(totalData[2]) / float(totalData[0])) + "%)"
  44. print "Support Yanukovych - " +str(totalData[3]) + " (" + str(float(totalData[3]) / float(totalData[0])) + "%)"
  45. print "Against all - " +str(totalData[4]) + " (" + str(float(totalData[4]) / float(totalData[0])) + "%)"
* This source code was highlighted with Source Code Highlighter.


Запускаем:

Total votes count - 25402069
Invalid votes count - 304811 (0.0119994556349%)
Support Tymoshenko - 11577320 (0.455762875063%)
Support Yanukovych - 12410894 (0.488578076061%)
Against all - 1109033 (0.0436591602046%)


Для каждого параноика найдется чем занятся.

PS: %habrauser% перед запуском не забудь поменять путь к «home дир»(подстановка "~/" выдает ошибку...) и создать там папку «cwk»
Tags:
Hubs:
Total votes 41: ↑26 and ↓15+11
Comments15

Articles