
    fi                        d Z ddlZddlmZmZ ddlZddlZddlm	Z	 ddl
mZ ddedej        fd	Zdej        fd
Zddedej        fdZddedej        fdZddedej        fdZddedefdZedk    r^ ed          Z ee            ed          Z ee            ed          Z ee            ed          Z ee           dS dS )u  
Date: 2024/6/17 14:00
Desc: 股票指数成份股数据, 新浪有两个接口, 这里使用老接口:
新接口：https://vip.stock.finance.sina.com.cn/mkt/#zhishu_000001
老接口：https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639
    N)BytesIOStringIO)BeautifulSoup)demjson000300symbolreturnc           	         | dk    rd} d}d|  i}t          j        ||          }t          j        t	          |                                          dz            dz   }t          j                    }t          d|          D ]r}d}t          |          d	d
ddddd}t          j        ||          }t          j
        |t          j        t          j        |j                            gd          }s|S d}ddd
dd|  dd}t          j        ||          }t          j        t          j        |j                            }|S )u
  
    新浪新版股票指数成份页面, 目前该接口可获取指数数量较少
    https://vip.stock.finance.sina.com.cn/mkt/#zhishu_000040
    :param symbol: 指数代码
    :type symbol: str
    :return: 指数的成份股
    :rtype: pandas.DataFrame
    r   hs300zlhttps://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimplenode)paramsP      z`https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData80r   1 init)pagenumsortascr   r   _s_r_aTobjsignore_indexzfhttps://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple3000zhishu_setlen)r   r   r   r   r   r   )requestsgetmathceilintjsonpd	DataFramerangestrconcatr   decodetext)r   urlr   rpage_numtemp_dfr   temps           C/usr/local/lib/python3.11/dist-packages/akshare/index/index_cons.pyindex_stock_cons_sinar2      sn    7 	 V+&LV,,,9S]]R/0014,..!X&& 	 	DtCD		   F S000Air|GN16,B,BCCDSW  GG 
rC"&"" F 	S(((A<qv..//DK    c                  8   d} t          j        |           }d|_        t          j        t          |j                            d         }|d         j                            dd          d         |d<   g d|_	        |g d	         
                                }|S )
u   
    聚宽-指数数据-指数列表
    https://www.joinquant.com/data/dict/indexData
    :return: 指数信息的数据框
    :rtype: pandas.DataFrame
    z-https://www.joinquant.com/data/dict/indexDatazutf-8r      指数代码.T)expand)
index_codedisplay_namepublish_date-r;   )r8   r9   r:   )r   r    encodingr%   	read_htmlr   r+   r(   splitcolumnscopy)r,   r-   index_dfr/   s       r1   index_stock_inforB   F   s     :CSAAJ|HQV,,--a0H'7;AA#dASSTUVH^OOOHEEEFKKMMGNr3   399639c           	      F   d|  d}t          j        |          }d|_        t          |j        d          }|                    ddi                              d                              d	          d
         d                             d          d
                             d          d         }|dk    r}t          j	        t          |j                  dd          d         j        ddddf         }|d                             t                    j                            d          |d<   |S t          j                    }t!          dt#          |          dz             D ]i}d| d|  }t          j        |          }d|_        t          j        |t          j	        t          |j                  d          d         gd          }j|j        ddddf         }|d                             t                    j                            d          |d<   |S )uF  
    最新股票指数的成份股目录
    https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639
    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 函数获取
    :type symbol: str
    :return: 最新股票指数的成份股目录
    :rtype: pandas.DataFrame
    zNhttps://vip.stock.finance.sina.com.cn/corp/go.php/vII_NewestComponent/indexid/z.phtmlgb2312lxmlclasstable2)attrstdahrefzpage=&r   #r   )headerskiprows   Nu   品种代码   zMhttps://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=z	&indexid=)rP   Tr   )r   r    r<   r   r+   findfind_allr>   r%   r=   r   ilocastyper(   zfillr&   r'   r#   r)   )r   r,   r-   soupr.   r/   r   s          r1   index_stock_consrZ   W   s
    j[a
i
i
iCSAAJ((D		(+	,,	d	#r	!	# 
w	 
sA		  3,x//AFFFqINqqqRTSTRTuU")."9"@"@"E"E"I"O"OPQ"R"RlnnGaX*++ 
 
u^buumsuuL
)2<(8(8CCCAFG
 
 
 l111bqb5!G%n5<<SAAEKKANNGNNr3   c                    d|  d}t          j        |          }t          j        t	          |j                            }g d|_        t          j        |d         dd          j        j	        |d<   |d         
                    t                    j                            d	          |d<   |d
         
                    t                    j                            d	          |d
<   |S )u  
    中证指数网站-成份股目录
    https://www.csindex.com.cn/zh-CN/indices/index-detail/000300
    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 函数获取
    :type symbol: str
    :return: 最新指数的成份股
    :rtype: pandas.DataFrame
    zThttps://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/cons/zcons.xls)	   日期r5      指数名称   指数英文名称   成分券代码   成分券名称   成分券英文名称	   交易所   交易所英文名称r\   %Y%m%dcoerceformaterrorsr5   rS   r_   )r   r    r%   
read_excelr   contentr?   to_datetimedtdaterW   r(   rX   r   r,   r-   r/   s       r1   index_stock_cons_csindexro   ~   s    	K:@	K 	K 	K  	SAmGAI..//G
 
 
GO (8   H &n5<<SAAEKKANNGN!():!;!B!B3!G!G!K!Q!QRS!T!TGNr3   c                    d|  d}t          j        |          }t          j        t	          |j                            }g d|_        t          j        |d         dd          j        j	        |d<   |d         
                    t                    j                            d	          |d<   |d
         
                    t                    j                            d	          |d
<   t          j        |d         d          |d<   |S )u  
    中证指数网站-样本权重
    https://www.csindex.com.cn/zh-CN/indices/index-detail/000300
    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 接口获取
    :type symbol: str
    :return: 最新指数的成份股权重
    :rtype: pandas.DataFrame
    z[https://oss-ch.csindex.com.cn/static/html/csindex/public/uploads/file/autofile/closeweight/zcloseweight.xls)
r\   r5   r]   r^   r_   r`   ra   rb   rc      权重r\   rd   re   rf   r5   rS   r_   rq   )rh   )r   r    r%   ri   r   rj   r?   rk   rl   rm   rW   r(   rX   
to_numericrn   s       r1   index_stock_cons_weight_csindexrs      s   	L4:	L 	L 	L  	SAmGAI..//G  GO (8   H &n5<<SAAEKKANNGN!():!;!B!B3!G!G!K!Q!QRS!T!TGgh&7IIIGHNr3   c                 j    |                      d          s|                      d          rd|  S d|  S )u   
    输入股票代码判断股票市场
    :param symbol: 股票代码
    :type symbol: str
    :return: 股票市场
    :rtype: str
    6900shsz)
startswithr   s    r1   stock_a_code_to_symbolr{      sG      !2!25!9!9 F}}F}}r3   __main__rz   )r   )rC   )__doc__r!   ior   r   pandasr%   r   bs4r   akshare.utilsr   r(   r&   r2   rB   rZ   ro   rs   r{   __name__index_stock_cons_csindex_dfprint"index_stock_cons_weight_csindex_dfindex_stock_cons_sina_dfindex_stock_cons_df r3   r1   <module>r      s                                ! ! ! ! ! !/ /# /R\ / / / /d",    "$ $S $ $ $ $ $N S     D! !C !r| ! ! ! !H 3 c     z":":("K"K"K	E
%&&&)H)H* * *& 
E
,---44HEEE	E
"###**(;;;	E
 r3   