关于tushare实盘操作的方法

 
  

在学习tushare的用法中:发现无法登录实盘。主要由以下两种原因造成:

1、tushare中现有函数无法识别验证码

tushare/trader/utils.py模块中的get_vcode函数,是zxjt网站交易登录界面验证码识别函数。但由于网站改版等原因,该函数中的vcode=pytessoract.image_to_string(img),对zxjt登录界面的验证码并不能很好的识别。

建立svm机器学习识别验证模块(我创建的pdsi包,包含此模块).

引入该模块函数:from pdsi import cropimage,clrfiles,get_feature, svm_model_test,在get_vcode函数加入相应语句即可识别。见下面:

2、验证码与对应登录网站的地址不一致。

zxjt有两个交易登录界面:newetrade.csc108.com、https://newetradesh.csc108.com,分别对应两个验证码地址。现有的tushare中trade.py模块错位了:将https://newetrade.csc108.com登录界面,使用的却是https://newetradesh.csc108.com/commons/image.jsp的验证码。

以下语句中红色部分为改进代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
#--------------------这个是改后的tushare/trader/utils.py文件
'''
Created on 2016年10月1日
@author: Jimmy Liu
@group : waditu
@contact: [email protected]
'''
import sys
sys.path.append(r"d:/pdsi")
from pdsi import cropimage,clrfiles,get_feature, svm_model_test
import os
import json
import time
import six
from tushare.trader import vars as vs
import pandas as pd
def nowtime_str():
    return time.time() * 1000


def get_jdata(txtdata):
    txtdata = txtdata.content
    if six.PY3:
        txtdata = txtdata.decode('utf-8')
    jsonobj = json.loads(txtdata)
    return jsonobj
        
        
def get_vcode(broker, res):
    from PIL import Image
    import pytesseract as pt
    import io
    if broker == 'csc':
        imgdata = res.content
        img = Image.open(io.BytesIO(imgdata)).convert("1")
        img.save(r'd:/pdsi/img/imgs/0image.png')
        #print(type(img),img)
        #vcode = pt.image_to_string(img)
        #print("vcodetype",vcode)
        clrfiles(r'./img/img_split/')
        cropimage(img,0,4)
        df_a=pd.DataFrame()
        for imgname in os.listdir('d:/pdsi/img/img_split/'):
            aa=get_feature(Image.open('d:/pdsi/img/img_split/'+str(imgname)))
            aa.insert(0,"2")
            df_a=df_a.append([aa])
        df_a.to_csv(r'./img/last_test_pix_xy_new.txt', index=False, sep=r' ', header=False)
        aaa=svm_model_test()
        print('验证码类型', type(aaa), aaa)
        vcode=aaa
        return vcode
    

另外:tushare/trader/trader.py文件中也有误,

    def login(self):
        self.s.headers.update(vs.AGENT)
        self.s.get(vs.CSC_PREFIX % (vs.P_TYPE['https'], vs.DOMAINS['csc'],
                                             vs.PAGES['csclogin']))
        res = self.s.get(vs.V_CODE_URL%(vs.P_TYPE['https'],
                                          vs.DOMAINS['csc'],#原来的是cscsh,登录的是:newetrader.csc108.com网站,但取的图片却是newetrade.csc108sh.com页面的验证码,造成不能登录。
                                          vs.PAGES['vimg']))													
        if self._login(utils.get_vcode('csc', res)) is False:
            print('请确认账号或密码是否正确 ,或券商服务器是否处于维护中。 ')
        self.keepalive()
tushare软件包,trader/trader.py中,验证码图片地址的res语句中,因登录界面登录的是newetrader.csc108.com(不是另一个网站newetradersh.csc108.com),vs.DOMAINS['cscsh']必须改为vs.DOMAINS['CSC']。

特别注意:

如果登录的是newetradersh.csc108.com,那么对应的验证码地址也是:newetradersh.csc108.com/commons/image.jsp

http://blog.sina.com.cn/s/blog_512d07ad0102wwbn.html

你可能感兴趣的:(python)