import requests, pandas as pd, numpy as np
from requests import session
from bs4 import BeautifulSoup
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)
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')
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ím:</b>')
cm_end=cm_start+g[cm_start:].find('<br>')
cm=g[cm_start+len('<b>Cí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
df.to_csv('kozb.csv',sep=';')
df=pd.read_csv('kozb.csv',sep=';')
data=pd.DataFrame(df)
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])
data['Latitude']=lat
data['Longitude']=lon
data=data.drop('coords',axis=1)
data=data[data.columns[2:]]
manual=data[data['Longitude']=='']
data=data[data['Longitude']!='']
data.to_excel('kdata.xlsx')
manual.to_excel('kmanual.xlsx')
manual.to_excel('kmanual_manual.xlsx')
Fix sector, address data and coordinates manually
data=pd.read_excel('kdata.xlsx')
manual=pd.read_excel('kmanual_manual.xlsx')
data=pd.concat([data.set_index('Közbirtokosság neve'),manual.set_index('Közbirtokosság neve')])
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
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])
pd.DataFrame(valid).to_excel('kvalid.xlsx')
pd.DataFrame(valid).to_excel('kvalid_manual.xlsx')
Manual check and overwrite
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')
len(data), len(manual)
data=pd.concat([data,manual])
data
data['Sector']=sectors.set_index(0)[1]
data.columns
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']]
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)
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)
Pretty Names
data.index=data.index.str.title().str.split('/').str[0].str.replace('Közbirtokosság','KB').str.replace('KBa','KB').str.replace('KB','')
#overwrite sector
data['Sector']='Közbirtokosság'
data['Size']=data['Gazdasági tevékenységbőlszármazó bevétel (RON)2018']*5
data.to_excel('kexport.xlsx')
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])
d2.join(data).to_excel('kexport2.xlsx')