Не пишу о политике из принципа, но тут просто обязан написать 🙂 Сегодня мы будем разбираться, как связаны политика и 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 = '\w+'
result_votes = re.findall(regxp, html)
result_votes = str(result_votes)
result_votes = result_votes.replace('\'', '').replace('', '').replace('[', '').replace(']', '')
response2 = requests.get(link2, headers={'User-Agent': UserAgent().chrome})
print(response2)
html2 = requests.get(link2)
html2 = response2.content
html2 = str(html2)
regxp = '\w+'
result_votes2 = re.findall(regxp, html2)
result_votes2 = str(result_votes2)
result_votes2 = result_votes2.replace('\'', '').replace('', '').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 голосов?
Support the Blog!
Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️