使用Python创建股票数据爬虫:一个克服困难的历程

导言:在信息时代股票数据的获取对于投资者和分析师而言至关重要。然而,获取准确且实时的股票数据并不是一件简单的事情。本篇博客将带你走进我创建股票数据爬虫的历程,分享我在克服困难和挑战中的经验。

1. 挑战的开始:股票数据的获取

起初,我需要寻找一个能够提供股票历史数据的数据源。我选择了Alpha Vantage这个开发者友好的API,它允许开发者通过API获取股票数据。然而,获得API密钥并不是难点,而是如何从API响应中提取、解析和处理数据。这是链接:Free Stock APIs in JSON & Excel | Alpha Vantage

 

2. 第一个尝试:Python和yfinance库

我开始使用`yfinance`库,它是一个用于获取Yahoo Finance数据的Python库。我尝试获取股票的历史价格数据,但却遇到了一些问题。一开始,我的代码无法成功获取数据,我在终端看到了“Failed to get ticker”等错误信息。经过搜索和调试,我发现可能是股票代码不正确或者数据源有问题。

3. 克服困难:学习和调试

我花了一些时间研究了API文档和库的用法,同时也尝试了不同的股票代码。在这个过程中,我了解到股票代码可能在不同的数据源中有所不同,有些代码可能已经停止交易。我在调试过程中也遇到了一些JSON解析错误,但通过逐步检查和打印变量,我成功找到了问题的根源并解决了它。

4. 美中不足:获取的数据不全

尽管我成功地获取了一些股票的历史价格数据,但我发现有些数据是不完整的,可能是由于数据源的限制。我开始思考其他可行的方法来获取更多完整的数据。

5. 探索新的途径:Alpha Vantage API

经过一番研究,我发现了Alpha Vantage提供的API,它能够提供更多的数据,并且有更多的参数可以调整。我注册了一个API密钥,然后开始使用Python编写代码来获取股票数据。虽然起初也遇到了一些问题,但通过API文档和错误消息,我最终成功获取了历史价格数据。

6. 数据处理和可视化:绘制折线图

成功获取数据后,我开始使用Pandas库来处理数据,将日期转换为适合处理的格式,并筛选出我所需要的时间范围。然后,我使用Matplotlib库绘制了折线图,以展示股票的每日收盘价格。

8. 完成与展望:一段有趣的旅程

通过克服一个又一个困难,我成功地创建了一个股票数据爬虫,能够获取并可视化股票的历史价格数据。这个过程并不容易,但我从中学到了很多关于API、数据处理和编码的知识。未来,我希望能够继续改进和扩展这个爬虫,也希望能够将这些知识应用到其他有趣的项目中。

总结:创建股票数据爬虫的过程充满了挑战和乐趣。我从中学到了如何处理API响应、处理数据、绘制图表以及处理编码问题等技能。每个问题都是一个学习的机会,通过坚持和探索,我克服了困难,成功地完成了这个项目。 

这是一个月的:

import pandas as pd
import matplotlib.pyplot as plt
from alpha_vantage.timeseries import TimeSeries

# 替换为您的API密钥
api_key = "G9I7DPGR64E4UUKN"

# 创建TimeSeries对象
ts = TimeSeries(key=api_key, output_format='pandas')

# 获取股票历史数据
symbol = 'AAPL'  # 股票代码,例如苹果公司的代码为AAPL,可以自由输入,但只能是美股
data, meta_data = ts.get_daily(symbol=symbol, outputsize='full')

# 将日期列转换为Datetime类型,并设置为索引
data.index = pd.to_datetime(data.index)

# 获取本月数据
current_month = pd.Timestamp.now().month
current_year = pd.Timestamp.now().year
this_month_data = data[(data.index.month == current_month) & (data.index.year == current_year)]

# 查看列名
print(data.columns)

# 设置图形尺寸
plt.figure(figsize=(12, 8))

# 绘制折线图
plt.plot(this_month_data.index, this_month_data['4. close'], marker='o')  # 使用正确的列名
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.title('Daily Close Price of AAPL for the Current Month')
plt.grid()

# 保存图像到特定目录
save_path = 'D:\lx\hahaha.png'  # 替换为您的目录和文件名
plt.savefig(save_path)

# 显示图像
plt.show()

 

这是一年的:

 

import pandas as pd
import matplotlib.pyplot as plt
from alpha_vantage.timeseries import TimeSeries
import os

# 替换为您的API密钥
api_key = "G9I7DPGR64E4UUKN"

# 创建TimeSeries对象
ts = TimeSeries(key=api_key, output_format='pandas')

# 获取股票历史数据
symbol = input("请输入股票代码(例如:AAPL): ")  # 输入股票代码
data, meta_data = ts.get_daily(symbol=symbol, outputsize='full')

# 将日期列转换为Datetime类型,并设置为索引
data.index = pd.to_datetime(data.index)

# 获取今年数据
current_year = pd.Timestamp.now().year
this_year_data = data[data.index.year == current_year]

# 获取股票中文名称
stock_name_dict = {
    "AAPL": "苹果",
    "MSFT": "微软",
    "GOOGL": "谷歌",
    "AMZN": "亚马逊",
    "FB": "脸书",
    "TSLA": "特斯拉",
    "JPM": "摩根大通",
    "V": "Visa信用卡",
    "JNJ": "强生",
    "BABA": "阿里巴巴",
    "JD": "京东",
    # 在这里添加其他股票代码和中文名称的对应关系
}
stock_chinese_name = stock_name_dict.get(symbol, symbol)  # 默认为股票代码

# 设置图形尺寸
plt.figure(figsize=(12, 8))

# 绘制折线图
plt.plot(this_year_data.index, this_year_data['4. close'], marker='o')  # 使用正确的列名
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.title(f'Daily Close Price of {symbol} for the Current Year')
plt.grid()

# 设置保存目录和文件名
save_folder = 'D:\lx\股价'  # 替换为您的文件夹路径
os.makedirs(save_folder, exist_ok=True)  # 创建文件夹,如果不存在的话
file_name = f'{stock_chinese_name}_this_year.png'

# 保存图像(不使用os.path.join)
save_filename = os.path.join(save_folder, file_name)

# 保存图像
plt.savefig(save_filename)

# 显示图像
plt.show()

print(f"图像已保存为{save_filename}")

这是很多年的: 这里换了阿里的股价

 

这是苹果 的股价

 

 

 

 

# coding=utf-8
# 2023/8/21 23:57
import pandas as pd
import matplotlib.pyplot as plt
from alpha_vantage.timeseries import TimeSeries


# 替换为您的API密钥
api_key = "G9I7DPGR64E4UUKN"

# 创建TimeSeries对象
ts = TimeSeries(key=api_key, output_format='pandas')

# 获取股票历史数据
symbol = input("请输入股票代码(例如:AAPL): ")  # 输入股票代码
data, meta_data = ts.get_daily(symbol=symbol, outputsize='full')

# 将日期列转换为Datetime类型,并设置为索引
data.index = pd.to_datetime(data.index)

# 获取股票中文名称
stock_name_dict = {
    "AAPL": "苹果",
    "MSFT": "微软",
    "GOOGL": "谷歌",
    "AMZN": "亚马逊",
    "FB": "Facebook",
    "TSLA": "特斯拉",
    "BRK.A": "伯克希尔哈撒韦",
    "JPM": "摩根大通",
    "V": "Visa",
    "JNJ": "强生",
    # 在这里添加其他股票代码和中文名称的对应关系
}

    # 在这里添加其他股票代码和中文名称的对应关系

stock_chinese_name = stock_name_dict.get(symbol, symbol)  # 默认为股票代码

# 设置图形尺寸
plt.figure(figsize=(12, 8))

# 绘制折线图
plt.plot(data.index, data['4. close'], marker='o')  # 使用正确的列名
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.title(f'Daily Close Price of {stock_chinese_name}')
plt.grid()

# 保存图像到特定目录
save_filename = f'{stock_chinese_name}.png'
plt.savefig(save_filename)

# 显示图像
plt.show()

print(f"图像已保存为{save_filename}")

 或许,可以凭直觉看股价?成为股神指日可待!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值