首先,你需要先安装Python程序:
今天我们来一起讲讲如何从东方财富网获取一只股票的日行情数据。
往后的几期,我们会讲一讲如何下载到本地数据库永久保存,如何调用这些数据,如何模块化各个功能。
前面我们讲了如何获取股票的专用代码,今天让我们一起来看一看如何应用专用代码获取一只股票的日行情数据。
import requests # 导入requests库,用于发送网络请求
session = requests.Session() # 创建一个会话对象,可以保持连接,提高请求效率
# 定义要查询的股票名称
code = '新集能源'
# 定义请求头,模拟浏览器行为,避免被服务器拒绝
request_header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
}
# 定义请求的URL,包含查询参数
# 这里拼接URL时,应确保参数正确编码
getcode_url = "https://searchapi.eastmoney.com/api/suggest/get?input=" + code + "&type=14"
# 使用会话对象发送GET请求,获取响应数据
getcode_response = session.get(getcode_url, headers=request_header).json()
# 提取股票代码
# 这里应该先检查getcode_response中是否有'QuotationCodeTable'和'Data'键
if 'QuotationCodeTable' in getcode_response and 'Data' in getcode_response['QuotationCodeTable']:
stock_id = getcode_response['QuotationCodeTable']['Data'][0]['QuoteID']
else:
print("无法获取股票代码")
stock_id = None
# 定义查询股票数据的日期范围
start_date = '20240901'
end_date = '20240912'
# 定义获取股票数据的参数
# 这里应该使用字典,而不是元组,因为params参数需要字典格式
getdata_params = {
"beg": start_date,
"end": end_date,
"secid": stock_id,
}
# 定义获取股票数据的URL
# 这里URL字符串的拼接应避免不必要的转义字符
getdata_url = "https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61&rtntype=6&klt=101&fqt=1"
# 使用会话对象发送GET请求,获取股票数据
response = session.get(getdata_url, headers=request_header, params=getdata_params).json()
# 打印获取到的股票数据
response
运行结果:

我看到输出的信息很多,我们只想要行情数据,这样实现。
在这个步骤,我开始教大家处理获取的数据,让数据更加直观,使用更加方便,另外程序中加入了一些判断,进一步提升数据的有效性:
import requests # 导入requests库,用于发送网络请求
import pandas as pd # 导入pandas库,用于数据处理
# 创建一个会话对象,可以保持连接,提高请求效率
session = requests.Session()
# 定义要查询的股票名称
code = '新集能源'
# 定义请求头,模拟浏览器行为,避免被服务器拒绝
request_header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
}
# 定义请求的URL,包含查询参数
# 注意:这里的URL拼接存在问题,""" 应该是一个错误
getcode_url = "https://searchapi.eastmoney.com/api/suggest/get?input=" + code + "&type=14"
# 使用会话对象发送GET请求,获取响应数据
getcode_response = session.get(getcode_url, headers=request_header).json()
# 提取股票代码
# 这里应该先检查getcode_response中是否有'QuotationCodeTable'和'Data'键
if 'QuotationCodeTable' in getcode_response and 'Data' in getcode_response['QuotationCodeTable']:
stock_id = getcode_response['QuotationCodeTable']['Data'][0]['QuoteID']
else:
print("无法获取股票代码") # 如果无法获取股票代码,打印提示信息
stock_id = None
# 检查是否成功获取到股票代码
if stock_id:
# 定义查询股票数据的日期范围
start_date = '20240901'
end_date = '20240912'
# 定义获取股票数据的参数
getdata_params = {
"beg": start_date,
"end": end_date,
"secid": stock_id,
}
# 定义获取股票数据的URL
# 注意:这里的URL拼接存在问题,""" 应该是一个错误
getdata_url = "https://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13&fields2=f51,f52,f53,f54,f55,f56,f57,f59,f60,f61&rtntype=6&klt=101&fqt=1"
# 使用会话对象发送GET请求,获取股票数据
response = session.get(getdata_url, headers=request_header, params=getdata_params).json()
# 检查响应中是否包含数据
if 'data' in response and 'klines' in response['data']:
stock_df = response['data']['klines']
# 定义数据列名
columns = ['日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '涨跌幅', '涨跌额', '换手率']
# 将股票数据分割成行
rows = [k.split(',') for k in stock_df]
name = response['data']['name'] # 提取股票名称
code = stock_id.split('.')[-1] # 提取股票代码
# 使用pandas创建数据框
df = pd.DataFrame(rows, columns=columns)
df.insert(0, '代码', code) # 在数据框中插入股票代码列
df.insert(0, '名称', name) # 在数据框中插入股票名称列
display(df) # 打印数据框
else:
print("无法获取股票数据") # 如果无法获取股票数据,打印提示信息
else:
print("股票代码获取失败") # 如果股票代码获取失败,打印提示信息
运行结果:

结果显示,我们获取了“新集能源”这只股票从2024年9月1日至2024年9月12日的所有日数据,字段包括:‘日期’, ‘开盘’, ‘收盘’, ‘最高’, ‘最低’, ‘成交量’, ‘成交额’, ‘涨跌幅’, ‘涨跌额’, ‘换手率’。
今天的教程到此结束,多学多用多练。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/804703
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!