小言_互联网的博客

Python获取股票机构调研数据

528人阅读  评论(0)

最近听了一个线上讲座,讲座的内容大概就是讲解量化投资的。因为本人目前没做过相关的实践,但是对于老师提出的思路很赞同,老师的思路是股票市场往往都是机构说了算,但是机构具体想要拉升那只股票,就不得而知。那么有没有一种类似阴谋论的现实现象来串通一气,然后拉升股票的价格。确实是有这种操作。当然不能说是串通一气了,但是多少有那种意思。而这种所谓串通一气的方式就叫做“机构调研”,也就是说机构管理者会在持股前与上市公司进行沟通,表达机构想要持有该上市公司的股票的想法。当然也不能说这么明白的话,机构调研除了投资的成分还有现场观摩等,相当于机构了解了该公司运作,当然具体的调研结果也是会通过报表的方式向外进行暴露。一个潜在的现象是调研后的股票会有一定的异动,所以这也是一般投资者应该关注的地方。

所以这块作者就通过天天基金网站来拉取股票的机构调研信息。具体代码如下

配置文件


   
  1. [Mysql-Database]
  2. host=localhost
  3. user=root
  4. passwd=tianjingle
  5. db=noun
  6. charset=utf8
  7. [Email]
  8. pass= 1
  9. user= 1062879@qq.com
  10. sender= 2695062879@qq.com
  11. receiver= 2695062879@qq.com, 1640910489@qq.com
  12. [System]
  13. syn= True
  14. scans= 4000
  15. [Jgdy]
  16. fetchUrl=http://datainterface3.eastmoney.com/EM_DataCenter_V3/api/JGDYHZ/GetJGDYMX?js=datatable435798&tkn=eastmoney&secuCode={ 0}&sortfield= 4&sortdirec= 1&pageNum={ 1}&pageSize={ 2}&cfg=jgdyhz&p= 2&page No={ 3}&_= 1610583145484

配置文件初始化


   
  1. import configparser
  2. class Connection:
  3. host = 'localhost'
  4. port = 3307
  5. user = 'root'
  6. passwd = ''
  7. db = 'noun'
  8. charset = 'utf8'
  9. emailPass= ''
  10. emaialUser= ''
  11. sender= ''
  12. receivers= ''
  13. jgdyUrl= ''
  14. syn=False
  15. scans= 2000
  16. def __init__(self):
  17. cf = configparser.ConfigParser()
  18. cf.read( "config.ini")
  19. self.emailPass = cf.get( "Email", "pass")
  20. self.emaialUser = cf.get( "Email", "user")
  21. self.sender = cf.get( "Email", "sender")
  22.          self.receivers = cf.get( "Email", "receiver")
  23. self.host = cf.get( "Mysql-Database", "host")
  24. self.user = cf.get( "Mysql-Database", "user")
  25. self.passwd = cf.get( "Mysql-Database", "passwd")
  26. self.db = cf.get( "Mysql-Database", "db")
  27. self.charset = cf.get( "Mysql-Database", "charset")
  28. self.syn=cf.get( "System", "syn")
  29. self.scans=cf.get( "System", "scans")
  30. self.jgdyUrl=cf.get( "Jgdy", "fetchUrl")

获取数据相关代码


   
  1. import json
  2. import uuid
  3. import pymysql
  4. import requests
  5. from prettytable import PrettyTable
  6. from src.NewTun.Connection import Connection
  7. class JgdyQuery:
  8. connection = None
  9. cursor = None
  10. #解析数据
  11. def __init__(self):
  12.          self.connection = Connection()
  13. #解析数据
  14. def printJgdyInfo(self,code,page):
  15. url = self.connection.jgdyUrl
  16.         url=url.format(code,page, 10,page)
  17. datas = self.get_url(url)
  18.          # 取出json
  19. datas = datas[datas.find( '{') :datas.find( '}') + 3] # 从出现第一个{开始,取到第三个花括号}
  20. jsonBody = json.loads(datas)
  21. jsonDatas = jsonBody[ 'Data']
  22.         realData=jsonDatas[ 0]
  23. splitStr=realData[ "SplitSymbol"]
  24.         FieldName=realData[ "FieldName"]
  25.         FieldNames=FieldName.split( ',')
  26.         myData=realData[ 'Data']
  27.         fundsArray=[]
  28. for data in myData:
  29.             fundsArray = data.split(splitStr)
  30.              self.save2DB(fundsArray)
  31. #获取数据
  32. def get_url(self, url, params=None, proxies=None):
  33. rsp = requests.get(url, params=params, proxies=proxies)
  34. rsp.raise_for_status()
  35. return rsp.text
  36. def save2DB(self,item):
  37. connect = pymysql.Connect(
  38. host= self.connection.host,
  39. port= self.connection.port,
  40. user= self.connection.user,
  41. passwd= self.connection.passwd,
  42. db= self.connection.db,
  43. charset= self.connection.charset
  44. )
  45. cursor=connect.cursor()
  46.          #去重
  47. sql = "select * from ajgdy where CompanyCode='%s' and Licostaff='%s' and NoticeDate='%s'"
  48. data = (item[ 0], item[ 15],item[ 7])
  49. cursor.execute(sql % data)
  50. if len(list(cursor)) == 0:
  51. #入库
  52. sql = "INSERT INTO ajgdy (id, CompanyCode,CompanyName,OrgCode,OrgName,OrgSum,SCode,SName,NoticeDate,StartDate,EndDate,Place,Description,Orgtype,OrgtypeName,Personnel,Licostaff,Maincontent,ChangePercent,Close) " \
  53. "VALUES ( '%s', '%s','%s', '%s','%s', '%s', '%s','%s', '%s','%s','%s', '%s','%s', '%s','%s', '%s', '%s','%s', '%s','%s')"
  54. data = (uuid.uuid1(), item[ 0], item[ 1], item[ 2], item[ 3], item[ 4], item[ 5], item[ 6], item[ 7],item[ 8], item[ 9], item[ 10], item[ 11],item[ 12], item[ 13], item[ 14], item[ 15],item[ 16], item[ 17], item[ 18])
  55. cursor.execute(sql % data)
  56. connect.commit()
  57. # tianjl = JgdyQuery()
  58. # tianjl.printJgdyInfo("300232",1)

        如下图所示为作者拉取部分上市公司的机构调研数据的结果。


转载:https://blog.csdn.net/tianjingle_blog/article/details/112792966
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场