Created
March 30, 2020 17:31
-
-
Save allatambov/5397b803f32bd5a6530fcee1b6e98a17 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import requests | |
from bs4 import BeautifulSoup | |
# ссылка на результаты выборов 2016 | |
# Бурятия, данные по одной ТИК (Баргузинская) | |
# один столбец – один УИК + | |
# данные по всему ТИК в самом первом столбце | |
html_with_data = "http://www.buriat.vybory.izbirkom.ru/region/region/buriat?action=show&root=32000008&tvd=2032000653530&vrn=100100067795849®ion=4&global=true&sub_region=4&prver=0&pronetvd=0&vibid=2032000653530&type=464" | |
# загружаем страницу и забираем текстовый слой | |
# с кодом html | |
page = requests.get(html_with_data) | |
soup = BeautifulSoup(page.text) | |
# смотрим на код страницы и обнаруживаем, | |
# что главная таблица с данными имеет | |
# атрибут style с длинным значением width:... | |
# findAll() возврашает список из одного элемента | |
# извлекаем этот единственный элемент | |
# и сохраняем в table | |
table = soup.findAll('table', | |
{'style': 'width:100%;border-color:#000000'})[0] | |
# read_html() работает со строками | |
# превращаем table в строку через str() | |
# возвращается список из таблиц | |
pd.read_html(str(table)) | |
# выберем из длинного списка выше таблицу с индексом 1 | |
# здесь данные по всей ТИК | |
pd.read_html(str(table))[1] | |
# транспонируем, чтобы по столбцам шли названия показателей | |
part1 = pd.read_html(str(table))[1].T | |
part1 | |
# выберем из длинного списка выше таблицу с индексом 2 | |
# здесь данные по каждому УИКу | |
pd.read_html(str(table))[2] | |
# тоже транспонируем, чтобы одна строка | |
# соответствовала одному УИКу | |
part2 = pd.read_html(str(table))[2].T | |
# склеиваем две части | |
final = pd.concat([part1, part2]) | |
final | |
# убираем строку 0 | |
final = final.iloc[1:, :] | |
final | |
# новую строку 0 используем как названия столбцов | |
final.columns = final.iloc[0, :] | |
final | |
# вместо nan называем первый столбец УИК | |
final.rename(columns = {np.nan: 'УИК'}, inplace=True) | |
final | |
# убираем строку 0 | |
final = final.iloc[1:, :] | |
# меняем тип столбцов с 1 до конца на float | |
left = final.iloc[:, 0] | |
right = final.iloc[:, 1:].astype(float) | |
results = pd.concat([left, right], axis=1) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment