Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2020
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.19 KB | None | 0 0
  1. from typing import Dict, Optional, Tuple
  2.  
  3. import requests
  4.  
  5. import pandas as pd
  6.  
  7. import numpy as np
  8.  
  9. import itertools
  10.  
  11. import re
  12.  
  13.  
  14.  
  15.  
  16.  
  17. def get_content(url: str, cookies: Optional[Dict[str, str]] = None, headers: Optional[Dict[str, str]] = None):
  18.  
  19.     return requests.get(url, cookies=cookies, headers=headers).text
  20.  
  21.  
  22.  
  23.  
  24.  
  25. def get_regions_data(resp: str) -> Tuple[str, str]:
  26.  
  27.     return re.findall('href="(http://www.vybory.izbirkom.ru/region/region/izbirkom\?action=show.*?)">(.*?)<', resp)
  28.  
  29.  
  30.  
  31.        
  32.  
  33. def to_frame(response: str):
  34.  
  35.     response_tables = pd.read_html(response)
  36.  
  37.     __, region, sub_region = response_tables[0].iat[0, 0].split(' > ')
  38.  
  39.    
  40.  
  41.     sub_region = response_tables[3].iat[1, 1]
  42.  
  43.     res = response_tables[-1]
  44.  
  45.     return res.iloc[1:] \
  46.  
  47.         .set_axis(response_tables[6].iloc[1:, 1], axis=0) \
  48.  
  49.         .set_axis(res.iloc[0], axis=1) \
  50.  
  51.         .drop(index='Вы одобряете изменения в Конституцию Российской Федерации?') \
  52.  
  53.         .iloc[:, :-1] \
  54.  
  55.         .T \
  56.  
  57.         .assign(
  58.  
  59.             **{
  60.  
  61.                'ДА': lambda x: x['ДА'].str.split(' ').str[0],
  62.  
  63.                 'НЕТ': lambda x: x['НЕТ'].str.split(' ').str[0]
  64.  
  65.             }
  66.  
  67.         ) \
  68.  
  69.         .astype(np.int) \
  70.  
  71.         .assign(
  72.  
  73.             SUB_REGION=sub_region,
  74.  
  75.             REG=region
  76.  
  77.         ) \
  78.  
  79.         .reset_index() \
  80.  
  81.         .rename({0: 'УИК'}, axis=1) \
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. #  Получиь куку на сайте и потом подставить сюда
  90.  
  91.  
  92.  
  93. headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'}
  94.  
  95. cookies = {
  96.  
  97.     '__utma': '252441553.597083863.1593662989.1593662989.1593667178.2',
  98.  
  99.     '__utmc': '252441553',
  100.  
  101.    '__utmz': '252441553.1593662989.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)',
  102.  
  103.     'izbirkomSession': '47956e9f-0bed-403e-9409-22824cb90d13',
  104.  
  105.     'JSESSIONID': 'e8b50acdcf0776605c6de30b5199',
  106.  
  107.     '__utmb': '252441553.65.10.1593667178',
  108.  
  109. }
  110.  
  111.  
  112.  
  113. get_content_partial = lambda url: get_content(url, headers=headers, cookies=cookies)
  114.  
  115.  
  116.  
  117. start_url = 'http://www.vybory.izbirkom.ru/region/region/izbirkom?action=show&root=1&tvd=100100163596969&vrn=100100163596966&region=0&global=1&sub_region=0&prver=0&pronetvd=null&vibid=100100163596969&type=465'
  118.  
  119.  
  120.  
  121. full_content = get_content_partial(start_url)
  122.  
  123.  
  124.  
  125. result = pd.DataFrame()
  126.  
  127.  
  128.  
  129. for region_url, region_name in get_regions_data(full_content):
  130.  
  131.     print(f'Обработка региона: {region_name}')
  132.  
  133.    
  134.  
  135.     region_content = get_content_partial(region_url.replace('amp;', ''))
  136.  
  137.     region_data = get_regions_data(region_content)
  138.  
  139.     print(f'Всего {len(region_data)} районов')
  140.  
  141.     for subregion_url, subregion_name in region_data:
  142.  
  143.        
  144.  
  145.         subregion_content = get_content_partial(subregion_url.replace('amp;', ''))
  146.  
  147.         try:
  148.  
  149.             frame = to_frame(subregion_content)
  150.  
  151.         except Exception as ex:
  152.  
  153.             print(f'{region_name}: {subregion_name}', ex)
  154.  
  155.         result = pd.concat([result, frame], ignore_index=True, axis=0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement