o
    iPO                     @   sr  d Z ddlZddlmZ ddlZddlmZ ddl	Z	ddl
Z
ejZeedd dks7eedd dkr>ddlmZ nddlmZ dd	lmZ z
dd
lmZmZ W n eye   dd
lmZmZ Y nw d/ddZdd Z	d0ddZdd Z	d0ddZdd Z	d0ddZ dd Z!	d0ddZ"dd  Z#	d0d!d"Z$d#d$ Z%	d0d%d&Z&d'd( Z'd)d* Z(d+d, Z)d-d. Z*dS )1ul   
基本面数据接口 
Created on 2015/01/18
@author: Jimmy Liu
@group : waditu
@contact: jimmysoa@sina.cn
    N)cons)etree.      )StringIO)dateu)urlopenRequestc                 C   s   t d | du rt n| }|dd}|dk rdS | du r dn|dd |dd  d	 }ttj|| du r8dn|f }t|d
d }|	d}|dd}t
jt|ddid}|d}|S )u  
        获取沪深上市公司基本情况
    Parameters
    date:日期YYYY-MM-DD，默认为上一个交易日，目前只能提供2016-08-09之后的历史数据

    Return
    --------
    DataFrame
               code,代码
               name,名称
               industry,细分行业
               area,地区
               pe,市盈率
               outstanding,流通股本
               totals,总股本(万)
               totalAssets,总资产(万)
               liquidAssets,流动资产
               fixedAssets,固定资产
               reserved,公积金
               reservedPerShare,每股公积金
               eps,每股收益
               bvps,每股净资
               pb,市净率
               timeToMarket,上市日期
    Z   本接口即将停止更新，请尽快使用Pro版接口：https://tushare.pro/document/2N- 20160809r         /
   timeoutGBK--codeobjectdtype)printdulast_tddatereplacer
   ctALL_STOCK_BASICS_FILEr	   readdecodepdread_csvr   	set_index)datewdatedateprerequesttextdf r,   L/opt/alphahud/venv/lib/python3.10/site-packages/tushare/stock/fundamental.pyget_stock_basics   s   (

r.   c                 C   X   t d t| |du r*t  t| |dt }|dur(|d dd |d< |S dS )u  
        获取业绩报表数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        eps,每股收益
        eps_yoy,每股收益同比(%)
        bvps,每股净资产
        roe,净资产收益率(%)
        epcf,每股现金流量(元)
        net_profits,净利润(万元)
        profits_yoy,净利润同比(%)
        distrib,分配方案
        report_date,发布日期
    r   Tr   Nr   c                 S      t | dS Nr   strzfillxr,   r,   r-   <lambda>a       z!get_report_data.<locals>.<lambda>)r   r   _check_input_write_head_get_report_datar#   	DataFramemapyearquarterr+   r,   r,   r-   get_report_dataC   s   rA      MbP?c                 C   sr  t   t|D ]}t| ztt jt jd t jd t j	d | ||t j
d f }t|dd }|d}|dd	}tjt|}	|	d
}
t jrUdd |
D }ndd |
D }d	|}d| }t|d }|jddd}t j|_|j|dd}|	d}t|dkrtd|d d }t| |||W   S |W   S  t y } zW Y d }~qd }~ww t!t j")Nhttpvsffdr   r   r   r   r   r   //table[@class="list_table"]/trc                 S      g | ]
}t |d qS zutf-8r   tostringr"   .0noder,   r,   r-   
<listcomp>s       z$_get_report_data.<locals>.<listcomp>c                 S      g | ]}t |qS r,   r   rK   rL   r,   r,   r-   rO   u       <table>%s</table>r      )axisTignore_index(//div[@class="pages"]/a[last()]/@onclick\d+)#r   _write_consolerangetimesleepr
   
REPORT_URLP_TYPEDOMAINSPAGESPAGE_NUMr	   r!   r"   r   lxmlhtmlparser   xpathPY3joinr#   	read_htmldropREPORT_COLScolumnsappendlenrefindallr;   	ExceptionIOErrorNETWORK_URL_ERROR_MSGr?   r@   pageNodataArrretry_countpause_r)   r*   re   ressarrr+   nextPageer,   r,   r-   r;   e   s>   






r;   c                 C   r/   )uq  
        获取盈利能力数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        roe,净资产收益率(%)
        net_profit_ratio,净利率(%)
        gross_profit_rate,毛利率(%)
        net_profits,净利润(万元)
        eps,每股收益
        business_income,营业收入(百万元)
        bips,每股主营业务收入(元)
    r   Tr   Nr   c                 S   r0   r1   r2   r5   r,   r,   r-   r7      r8   z!get_profit_data.<locals>.<lambda>)r   r   r9   r:   _get_profit_datar#   r<   r=   r?   r@   datar,   r,   r-   get_profit_data   s   r   c                 C   sJ  t   t|D ]}t| ztt jt jd t jd t j	d | ||t j
d f }t|dd }|d}|dd	}tjt|}	|	d
}
t jrUdd |
D }ndd |
D }d	|}d| }t|d }t j|_|j|dd}|	d}t|dkrtd|d d }t| |||W   S |W   S    Y qtt j )NrD   rE   rF   r   r   r   r   r   r   rG   c                 S   rH   rI   rJ   rL   r,   r,   r-   rO      rP   z$_get_profit_data.<locals>.<listcomp>c                 S   rQ   r,   rR   rL   r,   r,   r-   rO      rS   rT   r   TrW   rY   rZ   )!r   r[   r\   r]   r^   r
   
PROFIT_URLr`   ra   rb   rc   r	   r!   r"   r   rd   re   rf   r   rg   rh   ri   r#   rj   PROFIT_COLSrm   rn   ro   rp   rq   r   rs   rt   )r?   r@   rv   rw   rx   ry   rz   r)   r*   re   r{   r|   r+   r}   r,   r,   r-   r      s:   







r   c                 C   r/   )u  
        获取营运能力数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        arturnover,应收账款周转率(次)
        arturndays,应收账款周转天数(天)
        inventory_turnover,存货周转率(次)
        inventory_days,存货周转天数(天)
        currentasset_turnover,流动资产周转率(次)
        currentasset_days,流动资产周转天数(天)
    r   Tr   Nr   c                 S   r0   r1   r2   r5   r,   r,   r-   r7      r8   z$get_operation_data.<locals>.<lambda>)r   r   r9   r:   _get_operation_datar#   r<   r=   r   r,   r,   r-   get_operation_data      r   c                 C   d  t   t|D ]}t| ztt jt jd t jd t j	d | ||t j
d f }t|dd }|d}|dd	}tjt|}	|	d
}
t jrUdd |
D }ndd |
D }d	|}d| }t|d }t j|_|j|dd}|	d}t|dkrtd|d d }t| |||W   S |W   S  ty } zW Y d }~qd }~ww t t j!)NrD   rE   rF   r   r   r   r   r   r   rG   c                 S   rH   rI   rJ   rL   r,   r,   r-   rO      rP   z'_get_operation_data.<locals>.<listcomp>c                 S   rQ   r,   rR   rL   r,   r,   r-   rO      rS   rT   r   TrW   rY   rZ   )"r   r[   r\   r]   r^   r
   OPERATION_URLr`   ra   rb   rc   r	   r!   r"   r   rd   re   rf   r   rg   rh   ri   r#   rj   OPERATION_COLSrm   rn   ro   rp   rq   r   rr   rs   rt   ru   r,   r,   r-   r      >   







r   c                 C   r/   )u;  
        获取成长能力数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        mbrg,主营业务收入增长率(%)
        nprg,净利润增长率(%)
        nav,净资产增长率
        targ,总资产增长率
        epsg,每股收益增长率
        seg,股东权益增长率
    r   Tr   Nr   c                 S   r0   r1   r2   r5   r,   r,   r-   r7   %  r8   z!get_growth_data.<locals>.<lambda>)r   r   r9   r:   _get_growth_datar#   r<   r=   r   r,   r,   r-   get_growth_data
  r   r   c                 C   r   )NrD   rE   rF   r   2   r   r   r   r   rG   c                 S   rH   rI   rJ   rL   r,   r,   r-   rO   8  rP   z$_get_growth_data.<locals>.<listcomp>c                 S   rQ   r,   rR   rL   r,   r,   r-   rO   :  rS   rT   r   TrW   rY   rZ   )"r   r[   r\   r]   r^   r
   
GROWTH_URLr`   ra   rb   rc   r	   r!   r"   r   rd   re   rf   r   rg   rh   ri   r#   rj   GROWTH_COLSrm   rn   ro   rp   rq   r   rr   rs   rt   ru   r,   r,   r-   r   )  r   r   c                 C   r/   )u7  
        获取偿债能力数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        currentratio,流动比率
        quickratio,速动比率
        cashratio,现金比率
        icratio,利息支付倍数
        sheqratio,股东权益比率
        adratio,股东权益增长率
    r   Tr   Nr   c                 S   r0   r1   r2   r5   r,   r,   r-   r7   f  r8   z%get_debtpaying_data.<locals>.<lambda>)r   r   r9   r:   _get_debtpaying_datar#   r<   r=   r>   r,   r,   r-   get_debtpaying_dataK  r   r   c                 C   sX  t   t|D ]}t| ztt jt jd t jd t j	d | ||t j
d f }t|dd }|d}tjt|}	|	d}
t jrOd	d
 |
D }ndd
 |
D }d|}d| }t|d }t j|_|j|dd}|	d}t|dkrtd|d d }t| |||W   S |W   S  ty } zW Y d }~qd }~ww tt j )NrD   rE   rF   r   r   r   r   rG   c                 S   rH   rI   rJ   rL   r,   r,   r-   rO   x  rP   z(_get_debtpaying_data.<locals>.<listcomp>c                 S   rQ   r,   rR   rL   r,   r,   r-   rO   z  rS   r   rT   r   TrW   rY   rZ   )!r   r[   r\   r]   r^   r
   DEBTPAYING_URLr`   ra   rb   rc   r	   r!   r"   rd   re   rf   r   rg   rh   ri   r#   rj   DEBTPAYING_COLSrm   rn   ro   rp   rq   r   rr   rs   rt   ru   r,   r,   r-   r   j  s<   







r   c                 C   r/   )u|  
        获取现金流量数据
    Parameters
    --------
    year:int 年度 e.g:2014
    quarter:int 季度 :1、2、3、4，只能输入这4个季度
       说明：由于是从网站获取的数据，需要一页页抓取，速度取决于您当前网络速度
       
    Return
    --------
    DataFrame
        code,代码
        name,名称
        cf_sales,经营现金净流量对销售收入比率
        rateofreturn,资产的经营现金流量回报率
        cf_nm,经营现金净流量与净利润的比率
        cf_liabilities,经营现金净流量对负债比率
        cashflowratio,现金流量比率
    r   Tr   Nr   c                 S   r0   r1   r2   r5   r,   r,   r-   r7     r8   z#get_cashflow_data.<locals>.<lambda>)r   r   r9   r:   _get_cashflow_datar#   r<   r=   r>   r,   r,   r-   get_cashflow_data  s   r   c                 C   r   )NrD   rE   rF   r   r   r   r   r   r   rG   c                 S   rH   rI   rJ   rL   r,   r,   r-   rO     rP   z&_get_cashflow_data.<locals>.<listcomp>c                 S   rQ   r,   rR   rL   r,   r,   r-   rO     rS   rT   r   TrW   rY   rZ   )"r   r[   r\   r]   r^   r
   CASHFLOW_URLr`   ra   rb   rc   r	   r!   r"   r   rd   re   rf   r   rg   rh   ri   r#   rj   CASHFLOW_COLSrm   rn   ro   rp   rq   r   rr   rs   rt   ru   r,   r,   r-   r     r   r   c                  C   s\   dd l } dd l}| d d }| j| j| j|| jj}| j| j|| jjS )Nr   r   )osinspectstackpathabspathri   dirnamepardir)r   r   caller_filer   r,   r,   r-   
_data_path  s
   "r   c                 C   n   t d |  r5ttj|  }t|dd }|d}|dd}|dd}t	j
t|d	d
id}|S dS )u
  
        获取某股票的历史所有时期资产负债表
    Parameters
    --------
    code:str 股票代码 e.g:600518
       
    Return
    --------
    DataFrame
        行列名称为中文且数目较多，建议获取数据后保存到本地查看
    r   r   r   r   	

	,r   r   r   N)r   isdigitr
   r   SINA_BALANCESHEET_URLr	   r!   r"   r   r#   r$   r   r   r)   r*   r+   r,   r,   r-   get_balance_sheet     
r   c                 C   r   )u  
        获取某股票的历史所有时期利润表
    Parameters
    --------
    code:str 股票代码 e.g:600518
       
    Return
    --------
    DataFrame
        行列名称为中文且数目较多，建议获取数据后保存到本地查看
    r   r   r   r   r   r   r   r   r   r   r   N)r   r   r
   r   SINA_PROFITSTATEMENT_URLr	   r!   r"   r   r#   r$   r   r   r,   r,   r-   get_profit_statement  r   r   c                 C   r   )u  
        获取某股票的历史所有时期现金流表
    Parameters
    --------
    code:str 股票代码 e.g:600518
       
    Return
    --------
    DataFrame
        行列名称为中文且数目较多，建议获取数据后保存到本地查看
    r   r   r   r   r   r   r   r   r   r   r   N)r   r   r
   r   SINA_CASHFLOW_URLr	   r!   r"   r   r#   r$   r   r   r,   r,   r-   get_cash_flow   r   r   )N)rB   rC   )+__doc__pandasr#   tushare.stockr   r   	lxml.htmlrd   r   rp   r]   __version__vintsplitior   pandas.compattushare.utilr   r   urllib.requestr	   r
   ImportErrorurllib2r.   rA   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   sP   ,
)#
"!
" 
" 
" 
!
"