关于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的验证码。

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


 
  1. #!/usr/bin/env python

  2. # -*- coding:utf-8 -*-

  3. #--------------------这个是改后的tushare/trader/utils.py文件

  4. '''

  5. Created on 2016年10月1日

  6. @author: Jimmy Liu

  7. @group : waditu

  8. @contact: jimmysoa@sina.cn

  9. '''

  10. import sys

  11. sys.path.append(r"d:/pdsi")

  12. from pdsi import cropimage,clrfiles,get_feature, svm_model_test

  13. import os

  14. import json

  15. import time

  16. import six

  17. from tushare.trader import vars as vs

  18. import pandas as pd

  19. def nowtime_str():

  20. return time.time() * 1000

  21.  
  22.  
  23. def get_jdata(txtdata):

  24. txtdata = txtdata.content

  25. if six.PY3:

  26. txtdata = txtdata.decode('utf-8')

  27. jsonobj = json.loads(txtdata)

  28. return jsonobj

  29.  
  30.  
  31. def get_vcode(broker, res):

  32. from PIL import Image

  33. import pytesseract as pt

  34. import io

  35. if broker == 'csc':

  36. imgdata = res.content

  37. img = Image.open(io.BytesIO(imgdata)).convert("1")

  38. img.save(r'd:/pdsi/img/imgs/0image.png')

  39. #print(type(img),img)

  40. #vcode = pt.image_to_string(img)

  41. #print("vcodetype",vcode)

  42. clrfiles(r'./img/img_split/')

  43. cropimage(img,0,4)

  44. df_a=pd.DataFrame()

  45. for imgname in os.listdir('d:/pdsi/img/img_split/'):

  46. aa=get_feature(Image.open('d:/pdsi/img/img_split/'+str(imgname)))

  47. aa.insert(0,"2")

  48. df_a=df_a.append([aa])

  49. df_a.to_csv(r'./img/last_test_pix_xy_new.txt', index=False, sep=r' ', header=False)

  50. aaa=svm_model_test()

  51. print('验证码类型', type(aaa), aaa)

  52. vcode=aaa

  53. return vcode

 

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


 
  1. def login(self):

  2. self.s.headers.update(vs.AGENT)

  3. self.s.get(vs.CSC_PREFIX % (vs.P_TYPE['https'], vs.DOMAINS['csc'],

  4. vs.PAGES['csclogin']))

  5. res = self.s.get(vs.V_CODE_URL%(vs.P_TYPE['https'],

  6. vs.DOMAINS['csc'],#原来的是cscsh,登录的是:newetrader.csc108.com网站,但取的图片却是newetrade.csc108sh.com页面的验证码,造成不能登录。

  7. vs.PAGES['vimg']))

  8. if self._login(utils.get_vcode('csc', res)) is False:

  9. print('请确认账号或密码是否正确 ,或券商服务器是否处于维护中。 ')

  10. self.keepalive()


 

[python] view plain copy

  1. <code class="language-python">tushare软件包,trader/trader.py中,验证码图片地址的res语句中,因登录界面登录的是newetrader.csc108.com(不是另一个网站newetradersh.csc108.com),vs.DOMAINS['cscsh']必须改为vs.DOMAINS['CSC']。</code>  

特别注意:

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

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

展开阅读全文

没有更多推荐了,返回首页