Не пишу о политике из принципа, но тут просто обязан написать 🙂 Сегодня мы будем разбираться, как связаны политика и Python 🙂
Некоторые из читателей блога, уверен, знают, что совсем недавно новым президентом Украины стал Владимир Зеленский: актер, юморист, КВН-щик, и прочее-прочее-прочее.
Собственно, вопрос в следующем: спустя буквально три дня после начала деятельности нового президента на сайте электронных петиций появилась петиция за отставку Президента Украины Владимира Зеленского. А спустя несколько часов на этом же сайте появилась петиция об отмене петиции «За отставку Президента Украины Владимира Зеленского«. Стало интересно, какая же динамика прироста, и какие интересные моменты можно постараться высмотреть в процессе анализа данных голосований по обоим петициям. В силу этого был написан код:
from datetime import datetime
import time
from pytz import timezone
import requests
from fake_useragent import UserAgent
import re
import ftplib
while True:
ukraine_time = timezone('Europe/Kiev')
ua_time = datetime.now(ukraine_time)
print('Ukraine time:', ua_time)
ua_time = str(ua_time)
link = 'https://petition.president.gov.ua/petition/53360'
link2 = 'https://petition.president.gov.ua/petition/53988'
file = 'votes.txt'
response = requests.get(link, headers={'User-Agent': UserAgent().chrome})
print(response)
html = requests.get(link)
html = response.content
html = str(html)
regxp = '<span>\w+'
result_votes = re.findall(regxp, html)
result_votes = str(result_votes)
result_votes = result_votes.replace('\'', '').replace('<span>', '').replace('[', '').replace(']', '')
response2 = requests.get(link2, headers={'User-Agent': UserAgent().chrome})
print(response2)
html2 = requests.get(link2)
html2 = response2.content
html2 = str(html2)
regxp = '<span>\w+'
result_votes2 = re.findall(regxp, html2)
result_votes2 = str(result_votes2)
result_votes2 = result_votes2.replace('\'', '').replace('<span>', '').replace('[', '').replace(']', '')
for_save = ua_time + '|' + result_votes + '|' + result_votes2
with open(file, 'a', encoding='utf-8') as f:
f.write(for_save + '\n')
print(ua_time, ':', result_votes, ':', result_votes2)
print('Загружаем файл на FTP\n')
host = '************'
ftp_user = '************'
ftp_password = '************'
print('Попытка соединения с FTP-сервером', host)
print('Login:', ftp_user)
print('Password:', ftp_password)
ftp = ftplib.FTP(host, ftp_user, ftp_password)
ftp_path = '//public_html//wp-content//uploads//2019//05'
ftp.cwd(ftp_path)
file = 'votes.txt'
print('Загружаем файл:', file)
file_to_upload = open(file, 'rb')
ftp.storbinary('STOR ' + file, file_to_upload)
print('Файл', file, 'успешно загружен на FTP-сервер\n \n *******************************')
ftp.close()
time.sleep(60)
который собирает с промежутком в одну минуту данные о количестве проголосовавших по каждой из петиций, причем делается это с меткой времени — что бы в последствии было легче обработать всю информацию 🙂 а еще выбрасывает полученные данные сюда — кому интересно, смотрите, анализируйте.
К сожалению, я допустил ряд ошибок, потому получаемые данные до отметки в 2019-05-27 20:09:36.013890+03:00|59962|25722 дублируются, и валятся кучей (я, оказывается, параллельно два процесса запустил, которые дублировали друг друга) 🙁
На этом все… позднее будем разбираться, как можно проанализировать полученные данные.
И да — в случае возникновения вопросов пишите на почту, или в Telegram.
UPD от 29 мая:
Собственно, сбор данных прекращен, потому что одна петиция уже считается запущенной в работу, и голосовать за нее нельзя.
Но после поверхностного просмотра полученных данных с помощью Open Office 😉 (да, я только разбираюсь, как рисовать графики в Python) — стала видна вот эта ступенька:
2019-05-26 23:29:54.850707+03:00 56855 24485
2019-05-26 23:30:10.889093+03:00 56855 24486
2019-05-26 23:30:56.264171+03:00 58805 24486
2019-05-26 23:31:12.411597+03:00 58805 24487
Может у кого-то есть соображения, как за минуту под одной петицией могут добавиться почти 2000 голосов?