股票投资数据分析与Python爬虫技术

随着远程工作的普及,越来越多的个人和政府部门开始采用在家办公模式。这使得人们有更多的时间来研究股票投资。许多初创企业和应用程序应运而生,为股票投资提供了不同的工具和技术。如果具备编程知识,并希望分析Nifty 50的历史数据以获得洞察,本文将为提供帮助。

一旦获得了适当的历史数据,就可以分析趋势并开始投资股票。现在,考虑如何获取Nifty 50的历史数据。有几个网站提供Nifty历史数据。以下是提供历史数据的网站列表:

本文将专注于Investing.com,展示如何从该网站提取Nifty 50的历史数据。将通过传递日期范围来抓取Nifty 50的数据。传递日期范围后,将获得如下数据。

用于获取Nifty数据的Web Scraping工具或模块

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历史数据的每日数据,可以开始分析上升和下降趋势。可以将数据汇总到每周、每月和每季度。

  • 对提取的Nifty数据进行EDA(探索性数据分析)。通过绘制不同的图表、检查缺失数据、检查异常值、检查相关性等,开始对数据进行探索性数据分析。
  • 将提取的数据转换为时间序列。使用不同的库将提取的数据转换为时间序列数据。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485