非交易日.txt:
2020-01-01
2020-01-04
2020-01-05
2020-01-11
2020-01-12
2020-01-18
2020-01-19
2020-01-24
2020-01-25
2020-01-26
2020-01-27
2020-01-28
2020-01-29
....
完整代码
import requests
import json
import requests.packages.urllib3.util.ssl_
import time
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = "ALL" # 防止SSL限制
def save_trading_date(date_str: str, is_trading_day: bool):
"""保存结果:交易日/非交易日
:param date_str: 日期,字符串格式
:param is_trading_day: 是否为交易日,为了区分交易日保存
"""
if is_trading_day:
save_file_path = "交易日.txt"
else:
save_file_path = "非交易日.txt"
with open(save_file_path, "a") as file:
file.write(date_str)
file.write("
")
def get_trading_date(month_date: str):
"""通过爬虫抓取深交所的交易日历
:param month_date: 日期,例 2020-01、2022-12
"""
target_url = "http://www.szse.cn/api/report/exchange/onepersistenthour/monthList?month={}".format(month_date)
send_headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
"Connection": "keep-alive",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7"}
time.sleep(2) # 限制频率
req = requests.get(target_url, headers=send_headers)
json_state = json.loads(req.text)
for dict_value in json_state["data"]:
if dict_value["jybz"] == "0": # 非交易日
save_trading_date(dict_value["jyrq"], False)
elif dict_value["jybz"] == "1": # 交易日
save_trading_date(dict_value["jyrq"], True)
def main():
for _year_i in ["2020", "2021", "2022"]:
for _month_i in range(12):
get_trading_date("{}-{}".format(_year_i, _month_i + 1))
if __name__ == "__main__":
main()
我们可以看到2022-04-04和2022-04-05那个地方是灰色的,因此大概率能够区分是否为交易日的接口在,果然一番操作下来,我们发现了交易日历的接口:
这样,我们就有了如下方案:
获取交易日思路
对于接口:http://www.szse.cn/api/report/exchange/onepersistenthour/monthList?month=2022-04
构造URL:http://www.szse.cn/api/report/exchange/onepersistenthour/monthList?month={日期}写一个小爬虫,解析这个接口数据如果jybz为0,表示非交易日,如果jybz是表示是交易日
打开深交所的交易日历页面:http://www.szse.cn/aboutus/calendar/index.html
然后会在本地生成两个文件:交易日.txt与非交易日.txt,内容就是对应的日期了:
文章为作者独立观点,不代表股票交易接口观点