code / 数据获取 /get股票过滤除息除权.py
tradequant's picture
Upload 59 files
7ec53ba
import akshare as ak
import pandas as pd
import datetime
from pymongo import MongoClient
import time
import pytz
client = MongoClient("mongodb://wth000:[email protected]:27017/dbname?authSource=wth000")
db = client["wth000"]
names = [("000", "001", "002", "600", "601", "603", "605")]
# 获取当前日期
start_date = "20170101"
# current_date = datetime.datetime.now()
# end_date = current_date.strftime("%Y%m%d")
# 从akshare获取A股主板股票的代码和名称
codes = ak.stock_zh_a_spot_em()
# 过滤掉ST股票
codes = codes[~codes["名称"].str.contains("ST")]
# 过滤掉退市股票
codes = codes[~codes["名称"].str.contains("退")]
for name in names:
try:
collection = db[f"股票除息除权{name}"]
collection.drop()
df = pd.DataFrame()
df = codes[codes["代码"].str.startswith(name)][["代码", "名称"]].copy()
# 遍历目标指数代码,获取其日K线数据
for code in df["代码"]:
try:
time.sleep(60.0)
# 通过 akshare 获取目标指数的日K线数据
k_data = ak.stock_history_dividend_detail(symbol=code, indicator="配股")
k_data["代码"] = float(code)
k_data = k_data[["代码","配股方案","配股价格","基准股本","股权登记日","除权日"]]
# 之前用切片方式保留的列,有点问题改成直接保留某几列了
k_data["配股方案"] = k_data["配股方案"].apply(lambda x: float(x))
k_data["配股价格"] = k_data["配股价格"].apply(lambda x: float(x))
k_data["基准股本"] = k_data["基准股本"].apply(lambda x: float(x))
k_data["股权登记日"] = k_data["股权登记日"].apply(lambda x: str(x))
k_data["除权日"] = k_data["除权日"].apply(lambda x: str(x))
print(k_data)
collection.insert_many(k_data.to_dict("records"))
print(code, "已完成")
except Exception as e:
print(code, "未除权除息", e)
print("任务已经完成")
except Exception as e:
print(e)