Found a solution myself used experimental get_query_params() and set_query_params() features.
import streamlit as st
import pandas as pd
import webbrowser
df = pd.DataFrame.from_dict({'link': ['<a href="?url=google" target="_top"> Google </a>',
'<a href="?url=facebook" target="_top"> Facebook </a>'], 'id': [1, 2]})
df = df.to_html(escape=False, index=False, show_dimensions=True)
h = '<head><style type="text/css"></style></head>'
bo = '<body><div style = "height:200px;width:100%;overflow:auto;">'
bc = '</div></body>'
st.write(h + bo + df + bc, unsafe_allow_html=True)
para = st.experimental_get_query_params()
if 'url' in para.keys():
st.experimental_set_query_params()
st.write(f'you just clicked {para.get("url")[0]}')
webbrowser.open_new_tab(f'https://{para.get("url")[0]}.com')