Не пишу о политике из принципа, но тут просто обязан написать 🙂 Сегодня мы будем разбираться, как связаны политика и 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 голосов?