随着远程工作的普及,越来越多的个人和政府部门开始采用在家办公模式。这使得人们有更多的时间来研究股票投资。许多初创企业和应用程序应运而生,为股票投资提供了不同的工具和技术。如果具备编程知识,并希望分析Nifty 50的历史数据以获得洞察,本文将为提供帮助。
一旦获得了适当的历史数据,就可以分析趋势并开始投资股票。现在,考虑如何获取Nifty 50的历史数据。有几个网站提供Nifty历史数据。以下是提供历史数据的网站列表:
本文将专注于Investing.com,展示如何从该网站提取Nifty 50的历史数据。将通过传递日期范围来抓取Nifty 50的数据。传递日期范围后,将获得如下数据。
Selenium、Requests和BeautifulSoup是用于从Nifty数据中获取数据的Web scraping工具或模块。Selenium用于Web scraping,需要一个webdriver与浏览器接口。这里将使用Chrome浏览器,Selenium将使用Chrome driver作为webdriver来控制Chrome浏览器。
Requests库或模块用于向网站发送HTTP请求。BeautifulSoup库或模块用于解析HTML文档。以下是从investing.com抓取Nifty历史数据的步骤。
对于Windows,只需从提供的链接下载所需的Chrome驱动版本,从zip文件夹中提取Chrome驱动,并将其存储在与Python脚本相同的位置。对于Linux,请按照以下步骤操作:
# 更新Ubuntu
apt-get update
# 安装Chrome驱动
apt install chromium-chromedriver
# 将Chrome驱动复制到bin文件夹
cp /usr/lib/chromium-browser/chromedriver /usr/bin
# 添加路径到系统路径
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
# 添加Chrome选项到webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# Windows加载Selenium的Web Driver
driver = webdriver.Chrome()
# Linux加载Selenium的Web Driver
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
from datetime import date
import time
from datetime import datetime
today = date.today()
enddate = time.mktime(today.timetuple())
enddate = int(enddate)
starting_day_of_current_year = datetime.now().date().replace(month=1, day=1)
stdate=time.mktime(starting_day_of_current_year.timetuple())
stdate=int(stdate)
url="https://in.investing.com/indices/s-p-cnx-nifty-historical-data?end_date={}&st_date={}".format(enddate,stdate)
driver.get(url)
# 获取页面内容数据
content = driver.page_source
soup = BeautifulSoup(content)
现在将准备一个列表,并提取Nifty 50所需的列为列表。将为每个所需列初始化一个列表,并在从网站获得的内容中搜索所需列。
# 加载日期列
date=[]
for a in soup.findAll('td', attrs={'class':'col-rowDate'}):
date_txt=a.find('span', attrs={'class':'text'})
date.append(date_txt.text)
# 加载收盘价
close=[]
for a in soup.findAll('td', attrs={'class':'col-last_close'}):
close_txt=a.find('span', attrs={'class':'text'})
close.append(close_txt.text)
# 加载开盘价
open=[]
for a in soup.findAll('td', attrs={'class':'col-last_open'}):
open_txt=a.find('span', attrs={'class':'text'})
open.append(open_txt.text)
# 加载最高价
high=[]
for a in soup.findAll('td', attrs={'class':'col-last_max'}):
high_txt=a.find('span', attrs={'class':'text'})
high.append(high_txt.text)
# 加载最低价
low=[]
for a in soup.findAll('td', attrs={'class':'col-last_min'}):
low_txt=a.find('span', attrs={'class':'text'})
low.append(low_txt.text)
将准备一个包含所需列的DataFrame。
df_nifty = pd.DataFrame({'Date':date,'Open':open,'High':high,'Low':low,'Close':close})
以上代码将数据转换为DataFrame。如果查看上述数据的截图,日期格式不正确,其他列的数据是字符串。现在将格式化数据。首先,删除列数据中的逗号,然后将它们转换为所需的格式,如字符串转换为日期和字符串转换为浮点数。
df_nifty['Date'] = df_nifty['Date'].str.replace(r",","")
df_nifty['Date']=pd.to_datetime(df_nifty.Date , format = '%b %d %Y')
df_nifty=df_nifty.drop_duplicates(subset="Date") # 删除重复数据
data = df_nifty
data['Close']=data['Close'].str.replace(r",","").astype('float')
data['Open']=data['Open'].str.replace(r",","").astype('float')
data['High']=data['High'].str.replace(r",","").astype('float')
data['Low']=data['Low'].str.replace(r",","").astype('float')
在本文中,探讨了使用Python从investing.com提取Nifty 50数据的过程。了解了如何在Windows和Linux系统上安装Selenium。此外,还获得了使用BeautifulSoup在内容中定位元素并将其存储在列表中的基本了解。此外,学习了将基本列合并到DataFrame中的基础知识,并触及了数据清洗和转换为适当格式的基础知识。
现在有了Nifty历史数据的每日数据,可以开始分析上升和下降趋势。可以将数据汇总到每周、每月和每季度。