In [1]:
import requests, pandas as pd, numpy as np
from requests import session
from bs4 import BeautifulSoup
In [2]:
url='http://www.omnibus.ro/index.php/hu/szekelyfoldi-top-listak/arbevetel/also-haromszek-2015-2018#oldal'
r = requests.get(url)

for c in r.cookies:
    print(c.name, c.value)
__cfduid ddf927e7801beda5fe82f1d16dfea29e81578227078
PHPSESSID 37tq2cosotem3rha99bjdhd280
In [23]:
url='http://www.omnibus.ro/index.php/hu/szekelyfoldi-top-listak/kozbirtokossag/top25-kozbirtokossag-2019#oldal'
with session() as c:
    response = c.get(url)
    #print(response.headers)
    #print(response.text)
    df=pd.read_html(response.text)[1]
    df.columns=list(df.loc[0])
    df=df.loc[2:]
    #df=df[df.columns[1:-1]]
    df=df.loc[list(df.index)[:-1]]
    #df['nr']=df.index

soup = BeautifulSoup(response.content)
links=soup.findAll('table')[3].findAll('a')
In [25]:
coords=[]
kws=[]
cms=[]
for i in range(len(links)):
    print(i,)
    r=requests.get(links[i]['href'])
    g=repr(r.content)
    coord_start=g.find('GLatLng')
    coord_end=coord_start+g[coord_start:].find(')')
    coord=g[coord_start+len('GLatLng')+1:coord_end].split(',')
    kw_start=g.find('<meta name="keywords')
    kw_end=kw_start+g[kw_start:].find('/>')
    kw=g[kw_start+len('<meta name="keywords" content="'):kw_end].split(',')
    kw=[i.strip() for i in kw]
    cm_start=g.find('<b>C&iacute;m:</b>')
    cm_end=cm_start+g[cm_start:].find('<br>')
    cm=g[cm_start+len('<b>C&iacute;m:</b>'):cm_end].strip()

    coords.append(coord)
    kws.append(kw)
    cms.append(cm)

df=df[:len(links)]
df['coords']=coords
df['kws']=kws
df['cms']=cms
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:24: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:25: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:26: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
In [26]:
df.to_csv('kozb.csv',sep=';')
In [70]:
df=pd.read_csv('kozb.csv',sep=';')
In [71]:
data=pd.DataFrame(df)
In [72]:
lat=[]
lon=[]
for i in range(len(data.index)):
    k=str(data.loc[data.index[i]]['coords']).replace("'",'').replace('[','')\
    .replace(']','').replace(' ','').split(',')
    lon.append(k[0])
    lat.append(k[1])
In [73]:
data['Latitude']=lat
data['Longitude']=lon
In [74]:
data=data.drop('coords',axis=1)
data=data[data.columns[2:]]
In [75]:
manual=data[data['Longitude']=='']
data=data[data['Longitude']!='']
In [76]:
data.to_excel('kdata.xlsx')
manual.to_excel('kmanual.xlsx')
manual.to_excel('kmanual_manual.xlsx')

Fix sector, address data and coordinates manually

In [77]:
data=pd.read_excel('kdata.xlsx')
manual=pd.read_excel('kmanual_manual.xlsx')
In [78]:
data=pd.concat([data.set_index('Közbirtokosság neve'),manual.set_index('Közbirtokosság neve')])
In [82]:
sectors=pd.read_excel('sectors.xlsx')
sectormap={}
repl={'á':'a','é':'e','í':'i','ó':'o','ú':'u','ü':'u','ű':'u','ő':'o','ö':'o'}
for s in sectors.columns:
    for k in sectors[s].values:
        for j in str(k).replace(' ','').split(','):
            sectormap[j]=s
            for c in repl:
                j=j.replace(c,repl[c])
            sectormap[j]=s
In [83]:
valid=[]
kws=[]
ki=-1
for i in range(len(data.index)):
    ks=data.loc[data.index[i]]['kws'].replace("'",'').replace('[','')\
                .replace(']','').replace(' ','').lower().split(',')[:-2]
    for k in ks:
        if k in sectormap:
            kws.append(sectormap[k])
            break
        k=k.replace('-','')
        if k in sectormap:
            kws.append(sectormap[k])
            break
    if len(kws)<i-1: 
        print('ERROR',ks,i)
        break
    else:
        #print('SUCCES',kws[-1],ks)
        valid.append([data.index[i],kws[-1],ks])
In [84]:
pd.DataFrame(valid).to_excel('kvalid.xlsx')
pd.DataFrame(valid).to_excel('kvalid_manual.xlsx')

Manual check and overwrite

In [161]:
manual=pd.read_excel('kmanual_manual.xlsx').set_index('Közbirtokosság neve')
data=pd.read_excel('kdata.xlsx').set_index('Közbirtokosság neve')
sectors=pd.read_excel('kvalid_manual.xlsx')
In [162]:
len(data), len(manual)
Out[162]:
(23, 2)
In [163]:
data=pd.concat([data,manual])
In [164]:
data
Out[164]:
Unnamed: 0 Helyezés.1 Szék Gazdasági tevékenységbőlszármazó bevétel (RON)2018 Gazdasági tevékenységbőlszármazó bevétel (RON)2017 kws cms Latitude Longitude
Közbirtokosság neve
GYERGYÓALFALUI KÖZBIRTOKOSSÁG/ COMPOSESORATUL JOSENI 0 1 Gyergyószék 11 017 249 10 744 216 ['kozbirtokossagok', 'erdokitermeles', '', '"'] 537130, Gyergy\xf3alfalu, F\xf5 u., 663\t 25.515620 46.680137
ZETELAKI KÖZBIRTOKOSSÁG/ COMPOSESORAT ZETEA 2 2 Udvarhelyszék 7 620 294 7 011 349 ['allattenyesztes', 'csemetekert', 'erdogazdal... 537360, Zetelaka, F\xf5 u., 272\t 25.366667 46.383333
SZOVÁTAI MAROS KÖZBIRTOKOSSÁG/ COMPOSESORATUL MURESUL SOVATA 3 3 Marosszék 7 125 940 5 297 852 ['kozbirtokossagok', '', '"'] 545500, Szov\xe1ta, Iszujka u., 1\t 25.077440 46.599080
HOMORÓDALMÁSI KÖZBIRTOKOSSÁG/ COMPOSESORAT MERESTI 5 17 Udvarhelyszék 3 958 246 2 058 345 ['erdeszeti-szolgaltatasok', 'erdogazdalkodas'... 537195, Homor\xf3dalm\xe1s, F\xf5 u., 503\t 25.456996 46.234392
CSÍKSZENTIMREI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SINTIMBRU CIUC 6 11 Csíkszék 3 836 591 2 397 785 ['kozbirtokossagok', '', '"'] 537271, Cs\xedkszentimre, F\xf5 u., 572/A\t 25.862959 46.284012
BORSZÉK KÖZBIRTOKOSSÁG GYERGYÓSZÁRHEGY/ COMPOSESORATUL BORSEC LAZAREA 7 >25 Gyergyószék 3 660 937 1 122 063 ['kozbirtokossagok', '', '"'] 537135, Gyergy\xf3sz\xe1rhegy, , 702\t 25.531790 46.744120
CSÍKSZENTGYÖRGYI KÖZBIRTOKOSSÁG/ COMPOSESORATUL CIUCSANGEORGIU 8 6 Csíkszék 3 451 456 3 256 805 ['kozbirtokossagok', '', '"'] 537040, Cs\xedkszentgy\xf6rgy, , 189\t 25.960130 46.323230
GYERGYÓSZENTMIKLÓSI KÖZBIRTOKOSSÁG/ COMPOSESORATUL GHEORGHENI 9 5 Gyergyószék 3 349 378 3 407 803 ['kozbirtokossagok', '', '"'] 535500, Gyergy\xf3szentmikl\xf3s, Pet\xf5fi S\... 25.607200 46.722991
KILYÉNFALVA KÖZBIRTOKOSSÁGA/ COMPOSESORATUL CHILENI 10 20 Gyergyószék 3 096 467 1 969 503 ['erdokitermeles', 'kozbirtokossagok', '', '"'] 537306, Kily\xe9nfalva, F\xf5 u., 35\t 25.802604 45.835985
PAPOLCI IMREH ALBERT KÖZBIRTOKOSSÁG/ COMPOSESORATUL IMREH ALBERT PAPAUTI 11 7 Felső-Háromszék 3 095 199 3 154 109 ['kozbirtokossagok', '', '"'] 527186, Papolc, , 29\t 26.142945 45.788646
CSÍKCSEKEFALVI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA CIUCANI 12 9 Csíkszék 2 895 087 2 853 724 ['kozbirtokossagok', '', '"'] 537281, Cs\xedkcsekefalva, F\xf5 u., 77\t 25.946410 46.254800
CSÍKCSICSÓI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA CICEU 13 12 Csíkszék 2 753 868 2 380 248 ['kozbirtokossagok', '', '"'] 537297, Cs\xedkcsics\xf3, F\xf5 u., 650/A\t 25.779990 46.410470
NYÁRÁDREMETE KÖZBIRTOKOSSÁGA/ COMPOSESORATUL EREMITU 14 14 Marosszék 2 531 413 2 340 887 ['kozbirtokossagok', '', '"'] 547210, Ny\xe1r\xe1dremete, , 379C\t 24.927360 46.660980
CSÍKMADARASI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA MADARAS CIUC 15 15 Csíkszék 2 460 000 2 169 124 ['kozbirtokossagok', '', '"'] 537071, Cs\xedkmadaras, F\xf5 u., 192\t 25.749840 46.494020
CSÍKSZENTMÁRTONI AKLOS KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA AKLOS SINMARTIN 16 >25 Csíkszék 2 383 491 1 325 654 ['kozbirtokossagok', '', '"'] 537280, Cs\xedkszentm\xe1rton, F\xf5 u., 55\t 25.949280 46.266350
CSÍKSZENTDOMOKOSI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SANDOMINIC 17 10 Csíkszék 2 352 930 2 504 405 ['kozbirtokossagok', '', '"'] 537275, Cs\xedkszentdomokos, F\xf5 u., 1243\t 25.789032 46.579749
CSÍKBÁNKFALVI KÖZBIRTOKOSSÁG/ COMPOSESORATUL BANCU 18 19 Csíkszék 2 338 527 1 975 920 ['kozbirtokossagok', '', '"'] 537043, Cs\xedkb\xe1nkfalva, F\xf5 u., 344\t 25.943230 46.301690
OZSDOLAI LÁROS TULAJDONOSI EGYESÜLET/ ASOCIATIE PROPRIETARILOR RAMASI IN INDIVIZIUNE LAROS OJDULA 19 >25 Felső-Háromszék 2 295 564 1 496 973 ['kozbirtokossagok', '', '"'] 527125, Ozsdola, F\xf5 u., 588\t 26.250000 45.983333
GYERGYÓCSOMAFALVA KÖZBIRTOKOSSÁGA/ COMPOSESORATUL CIUMANI 20 >25 Gyergyószék 2 102 835 1 083 769 ['erdokitermeles', 'kozbirtokossagok', '', '"'] 537050, Gyergy\xf3csomafalva, F\xf5 u., 14\t 25.517272 46.685406
GYERGYÓÚJFALU KÖZBIRTOKOSSÁGA/ COMPOSESORATUL SUSENI 21 13 Gyergyószék 2 082 335 2 342 408 ['erdokitermeles', 'kozbirtokossagok', '', '"'] 537305, Gyergy\xf3\xfajfalu, F\xf5 u., 1039\t 25.555311 46.666291
SZÉKELYSZÁLDOBOSI KÖZBIRTOKOSSÁG/ COMPOSESORAT DOBOSENI 22 >25 Alsó-Háromszék 2 017 143 1 422 398 ['kozbirtokossagok', '', '"'] 527056, Sz\xe9kelysz\xe1ldobos, F\xf5 u., 143\t 25.593349 46.127242
CSÍKSZENTKIRÁLYI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA SINCRAIENI 23 22 Csíkszék 1 894 630 1 881 032 ['kozbirtokossagok', '', '"'] 537265, Cs\xedkszentkir\xe1ly, F\xf5 u., 160/A\t 25.839444 46.313333
CSÍKDÁNFALVI KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA DANESTI 24 >25 Csíkszék 1 879 072 1 669 899 ['kozbirtokossagok', '', '"'] 537070, Cs\xedkd\xe1nfalva, F\xf5 u., 775\t 25.750000 46.516667
CSÍKJENŐFALVI TERCS KÖZBIRTOKOSSÁG/ ASOCIATIA COMPOSESORALA TERCS INEU 1 18 Csíkszék 8 102 468 1 982 088 ['kozbirtokossagok','', '"'] Csikjenofalva 25.758609 46.451575
GYERGYÓDITRÓI KÖZBIRTOKOSSÁG/ COMPOSESORATUL DITRAU 4 16 Gyergyószék 4 276 682 2 157 196 ['kozbirtokossagok','', '"'] Ditrau 25.491271 46.803146
In [165]:
data['Sector']=sectors.set_index(0)[1]
In [166]:
data.columns
Out[166]:
Index(['Unnamed: 0', 'Helyezés.1', 'Szék',
       'Gazdasági tevékenységbőlszármazó bevétel (RON)2018',
       'Gazdasági tevékenységbőlszármazó bevétel (RON)2017', 'kws', 'cms',
       'Latitude', 'Longitude', 'Sector'],
      dtype='object')
In [167]:
data=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2018',
       'Gazdasági tevékenységbőlszármazó bevétel (RON)2017', 'Szék',
       'Latitude', 'Longitude', 'Sector']]
In [168]:
data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']=\
    np.round(data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018'].str.replace('\xa0','').astype(float)/1000000.0,3)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
In [169]:
data['Gazdasági tevékenységbőlszármazó bevétel (RON)2017']=\
    np.round(data['Gazdasági tevékenységbőlszármazó bevétel (RON)2017'].str.replace('\xa0','').astype(float)/1000000.0,3)
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  

Pretty Names

In [170]:
data.index=data.index.str.title().str.split('/').str[0].str.replace('Közbirtokosság','KB').str.replace('KBa','KB').str.replace('KB','')
In [172]:
#overwrite sector
data['Sector']='Közbirtokosság'
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
In [177]:
data['Size']=data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']*5
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  """Entry point for launching an IPython kernel.
In [178]:
data.to_excel('kexport.xlsx')
In [174]:
d2017=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2017']]
d2017.columns=['Gazdasági tevékenységbőlszármazó bevétel (millió RON)']
d2017['Év']=2017
d2018=data[['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']]
d2018.columns=['Gazdasági tevékenységbőlszármazó bevétel (millió RON)']
d2018['Év']=2018
d2=pd.concat([d2017,d2018])
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  This is separate from the ipykernel package so we can avoid doing imports until
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:6: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
In [175]:
d2.join(data).to_excel('kexport2.xlsx')
In [ ]: