1
0
Code Issues Pull Requests Projects Releases Wiki Activity GitHub Gitee
tools/stock_data/README.md
2023-12-27 17:32:52 +08:00

124 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 股票数据爬取
## 股票的基础知识
### 简介
股票是一种证券,它代表了投资者对某个公司的所有权的一部分。股票的价格由市场的供求关系决定,通常反映了投资者对公司未来盈利能力的预期。股票的持有者可以通过股息或卖出股票来获得收益,也可以通过参与股东大会或委托代理人来对公司的经营管理发表意见或投票。
### 种类
股票的种类有很多根据发行地点和投资者的不同可以分为A股、B股、H股、N股、S股、L股等。
- A股是指在中国大陆上市交易的人民币普通股主要面向中国大陆的投资者
- B股是指在中国大陆上市交易的外币特种股主要面向外国和港澳台的投资者
- H股是指在香港上市交易的人民币普通股主要面向全球的投资者。
其他的股票种类类似,只是发行地点和交易货币不同。
### 股票市场
股票在股票市场上进行买卖。常见的股票市场包括纳斯达克Nasdaq和纽约证券交易所NYSE
### 股票数据
股票价格数据:股票的基本数据包括开盘价(当日第一笔交易的价格)、收盘价(当日最后一笔交易的价格)、最高价和最低价。
成交量:成交量表示一段时间内的交易数量。高成交量通常伴随着市场波动。
调整后的股价:考虑公司分红、拆股等因素后的股价,以便更好地反映实际投资回报。
## 相关库
tushare积分制
https://www.tushare.pro/
akshare
efinance
https://github.com/Micro-sheep/efinance
https://pypi.org/project/efinance/
https://zhuanlan.zhihu.com/p/388088384
## 数据来源平台
天天基金网
https://www.1234567.com.cn/
东方财富网
http://quote.eastmoney.com/stocklist.html
腾讯证券
https://stockapp.finance.qq.com/mstats/
https://gu.qq.com/sh000001/zs
https://cn.investing.com/
https://www.alphavantage.co/
### 更多
https://www.wstock.net/
## 接口整理
腾讯股票、新浪股票、天天基金网接口整理
https://zhuanlan.zhihu.com/p/595505781
## 用Python爬取股票的历史数据
如果你想用Python爬取股票的历史数据有很多平台可以提供这样的服务比如东方财富网、网易财经、新浪财经等。这些平台通常会提供股票的代码、名称、开盘价、收盘价、最高价、最低价、成交量、成交额、涨跌幅、换手率等数据有些还会提供股票的资金流向、技术指标、财务报表等数据。你可以根据你的需要选择合适的平台和数据。
为了爬取股票的历史数据你需要使用Python的一些库比如requests、re、pandas等。requests库可以帮助你发送网络请求获取网页的源代码re库可以帮助你使用正则表达式从网页的源代码中提取你想要的数据pandas库可以帮助你将数据存储在数据框中方便进行分析和保存。你还可以使用一些第三方的库比如akshare、efinance等它们封装了一些常用的股票数据接口可以让你更方便地获取股票数据。
下面我将给你展示一个简单的例子如何用Python爬取东方财富网的股票数据并保存到本地的csv文件中。你可以参考这个例子根据你的需求修改代码或者查看更多的教程和文档学习更多的知识和技巧。
```python
# 导入 requests、re、pandas 库
import requests
import re
import pandas as pd
# 定义一个函数,根据股票代码和页码,获取股票的历史数据
def get_stock_data(stock_code, page):
# 构造 url根据东方财富网的规则cmd 参数表示股票代码p 参数表示页码
url = "http://data.eastmoney.com/DataCenter_V3/stock2016/TradeDetail/pagesize=50,page="+str(page)+",sortRule=-1,sortType=,startDate=,endDate=,gpfw=0,js=var%20data_tab_1.html?rt=26794299&code="+stock_code
# 发送 get 请求,获取网页的源代码
r = requests.get(url)
# 使用正则表达式,从源代码中提取 data 参数的值,即股票数据的列表
pat = "data:(.*?),"
data = re.compile(pat, re.S).findall(r.text)[0]
# 将字符串形式的列表转换为 Python 的列表
data = eval(data)
# 返回股票数据的列表
return data
# 定义一个股票代码,比如 600519即贵州茅台
stock_code = "600519"
# 定义一个空列表,用来存储所有的股票数据
stock_data = []
# 定义一个页码变量,初始值为 1
page = 1
# 循环爬取多页数据,直到没有新的数据为止
while True:
# 调用函数,获取第 page 页的股票数据
data = get_stock_data(stock_code, page)
# 如果数据不为空,说明还有新的数据,将数据添加到 stock_data 列表中
if data:
stock_data.extend(data)
# 打印提示信息,显示已经爬取了多少页
print("已爬取第"+str(page)+"页")
# 将页码加一,准备爬取下一页
page += 1
# 如果数据为空,说明没有新的数据了,跳出循环
else:
break
# 将 stock_data 列表转换为 pandas 的数据框
df = pd.DataFrame(stock_data)
# 定义数据框的列名,根据东方财富网的规则,依次为日期、开盘价、收盘价、最高价、最低价、涨跌幅、成交量、成交额、振幅、换手率
df.columns = ["日期","开盘价","收盘价","最高价","最低价","涨跌幅","成交量","成交额","振幅","换手率"]
# 将数据框保存到本地的 csv 文件中,文件名为股票代码,编码为 utf-8
df.to_csv(stock_code+".csv", encoding="utf-8", index=False)
# 打印提示信息,显示已经保存了多少条数据
print("已保存"+str(len(df))+"条数据到"+stock_code+".csv文件中")
```