pythonDMDQ

用Python爬取最新股票数据含完整源代码

抓取目标:

url:http://webapi.cninfo.com.cn/#/marketDataDate

数据目标: 获取 证券代码 证券简称 交易日期  开盘价 最高价 最低价 收盘价 成交数量

难点: 请求头参数mcode 加密生成 

使用第三方库:

1. requests

2. execjs

3. js2py

4. math

5. time

6. pandas

工具:

1. 谷歌浏览器

2. pycharm

3. python3.7

爬取到的股票数据存入到code.xlsx,可设定需要爬取的时间范围

 

 

import requests
import execjs
import js2py
import math
import time
import pandas as pd

code_list = []


def MCODE():
    jscode = \'\'\'
    function missjson(input) {  
        var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv"   + "wxyz0123456789+/" + "=";  
        var output = "";  
        var chr1, chr2, chr3 = "";  
        var enc1, enc2, enc3, enc4 = "";  
        var i = 0;  
        do {  
            chr1 = input.charCodeAt(i++);  
            chr2 = input.charCodeAt(i++);  
            chr3 = input.charCodeAt(i++);  
            enc1 = chr1 >> 2;  
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
            enc4 = chr3 & 63;  
            if (isNaN(chr2)) {  
                enc3 = enc4 = 64;  
            } else if (isNaN(chr3)) {  
                enc4 = 64;  
            }  
            output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)  
                    + keyStr.charAt(enc3) + keyStr.charAt(enc4);  
            chr1 = chr2 = chr3 = "";  
            enc1 = enc2 = enc3 = enc4 = "";  
        } while (i < input.length);  

        return output;  
    } 

    \'\'\'
    time1 = js2py.eval_js(\'Math.floor(new Date().getTime()/1000)\')
    # py方式
    a = math.floor(time.time() / 1000)
    mcode = execjs.compile(jscode).call(\'missjson\', \'{a}\'.format(a=time1))
    return mcode


def PageRquest(datetime, mcode):
    # 接口可以换
    url = \'http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1015\'
    data = {
        \'tdate\': datetime,  # 获取数据时间
        \'scode\': \'399001\'  # 股票代码 以及交易所简称
    }
    headers = {
        \'mcode\': str(mcode),
        \'Referer\': \'http://webapi.cninfo.com.cn/\',
        \'Cookie\': \'Hm_lvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634795282; Hm_lpvt_489bd07e99fbfc5f12cbb4145adb0a9b=1634799860\',
        \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36\'
    }
    response = requests.post(url, headers=headers, data=data).json()
    code = response[\'records\']
    for i in code:
        code_list.append(i)


def main(date):
    mcode = MCODE()
    PageRquest(date, mcode)


if __name__ == \'__main__\':
    # main()
    # 数据分析 pandas 自动化办公的
    datetime = pd.period_range(\'2021/5/26\', \'2021/10/27\', freq=\'B\')
    for date in datetime:
        main(date)
    df = pd.DataFrame(code_list)
    print(df)
    df.to_excel(\'code.xlsx\')

更多Python源代码,请微信关注:Python代码大全,

 

分类:

技术点:

相关文章: