<pre><code>import requests
import pandas as pd
#############################################
pd.set_option('display.max_rows', 500000)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 50000)
#############################################
# create session to get and keep cookies
s = requests.Session()
# get page and cookies
url = 'https://www.nseindia.com/products/content/derivatives/equities/historical_fo.htm'
s.get(url)
# get HTML with tables
symbol = ['SBIN']
dates = ['17-May-2019']
url = "https://www.nseindia.com/products/dynaContent/common/productsSymbolMapping.jsp?instrumentType=OPTSTK&symbol=" + symbol[0] + "&expiryDate=select&optionType=CE&strikePrice=&dateRange=day&fromDate=" + dates[0] + "&toDate=" + dates[0] + "&segmentLink=9&symbolCount="
# print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://www.nseindia.com/products/content/derivatives/equities/historical_fo.htm'
}
# get HTML from url
r = requests.get(url, headers=headers)
# print('status:', r.status_code)
# print(r.text)
# user pandas to parse tables in HTML to DataFrames
all_tables = pd.read_html(r.text)
# print('tables:', len(all_tables))
# get first DataFrame
df = all_tables[0]
# print(df.columns)
df = df.rename(columns=df.iloc[1]).drop(df.index[0])
df = df.iloc[1:].reset_index(drop=True)
df = df[['Symbol','Date','Expiry','Optiontype','Strike Price','Close','LTP','No. of contracts','Open Int','Change in OI','Underlying Value']]
print(df)
</code></pre>