当前位置:   article > 正文

python + Selenium 实现自动化查询问财数据及下载Excel数据并存入到mysql_问财自动化交易

问财自动化交易

问财的数据海量及时,作为量化交易的数据来源也是一种不错的选择,之前也用过一些免费的api,但是数据不是很完整,时效性也不高,试了一下问财觉得很不错,不过下载有次数限制,非会员每天只能导出2次,会员每天200次。因为不想每天手工操作,所以想通过该方法实现全自动下载导出存入mysql

安装selenium库

pip install selenium

安装google浏览器,查看版本号

下载对应版本驱动

下载地址:CNPM Binaries Mirror

解压后将文件放在 python/scripts 目录下

用cmd命令来启动google浏览器,也可以做成一个bat文件,方便下次快速打开浏览器

C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"

用上面的命令打开浏览器的好处是,运行程序不用产生新的浏览器,只会使用一个浏览器,这样就可以事先将账号登录好再进行后续的操作。

上代码查询一下试一试

  1. from selenium import webdriver
  2. import time
  3. from selenium.webdriver.common.by import By
  4. options = webdriver.ChromeOptions()
  5. options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
  6. browser = webdriver.Chrome(options=options)
  7. browser.get(f"https://www.iwencai.com/unifiedwap/result?w=%20%E7%AB%9E%E4%BB%B7%E6%B6%A8%E5%B9%85%20%E6%B5%81%E5%8A%A8%E5%B8%82%E5%80%BC%20%E6%A6%82%E5%BF%B5%20%E9%BE%99%E5%A4%B4%20%E4%BA%8C%E7%BA%A7%E8%A1%8C%E4%B8%9A&querytype=stock")
  8. browser.quit();

查询效果如下:

导出到excel,增加三行代码

  1. from selenium import webdriver
  2. import time
  3. from selenium.webdriver.common.by import By
  4. options = webdriver.ChromeOptions()
  5. options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
  6. browser = webdriver.Chrome(options=options)
  7. browser.get(f"https://www.iwencai.com/unifiedwap/result?w=%20%E7%AB%9E%E4%BB%B7%E6%B6%A8%E5%B9%85%20%E6%B5%81%E5%8A%A8%E5%B8%82%E5%80%BC%20%E6%A6%82%E5%BF%B5%20%E9%BE%99%E5%A4%B4%20%E4%BA%8C%E7%BA%A7%E8%A1%8C%E4%B8%9A&querytype=stock”)
  8. time.sleep(2)
  9. button = browser.find_element(By.CLASS_NAME,'table-export');
  10. button.click();
  11. browser.quit();

效果如下:

安装openpyxl 用于操作Excel

pip install openpyxl

安装mysql库

pip install pymysql

my.ini  或 my.cnf 增加一个配置项,可以批量插入大批量数据到sql

max_allowed_packet=100M

代码如下:

  1. from selenium import webdriver
  2. import time
  3. from selenium.webdriver.common.by import By
  4. import os
  5. import pymysql
  6. import decimal
  7. import sys
  8. import openpyxl
  9. import uuid
  10. def down(date):
  11. options = webdriver.ChromeOptions()
  12. options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
  13. browser = webdriver.Chrome(options=options)
  14. browser.get(f"https://www.iwencai.com/unifiedwap/result?w={date}%20%E7%AB%9E%E4%BB%B7%E6%B6%A8%E5%B9%85%20%E6%B5%81%E5%8A%A8%E5%B8%82%E5%80%BC%20%E6%A6%82%E5%BF%B5%20{date}%E9%BE%99%E5%A4%B4%20%E4%BA%8C%E7%BA%A7%E8%A1%8C%E4%B8%9A&querytype=stock")
  15. time.sleep(2)
  16. button = browser.find_element(By.CLASS_NAME,'table-export');
  17. button.click();
  18. browser.quit();
  19. pass
  20. def objToStr(value):
  21. if value is None:
  22. return ""
  23. else:
  24. return str(value)
  25. def strToDecimal(str):
  26. str = objToStr(str)
  27. if str == "":
  28. str = "0"
  29. return decimal.Decimal(str)
  30. def getDate():
  31. return time.strftime('%Y-%m-%d', time.localtime(time.time()));
  32. def getConn1():
  33. return pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="123456",db="wc_data" )
  34. def importAll(date):
  35. path='D:\\Users\Administrator\\下载'
  36. for file_name in os.listdir(path):
  37. if "竞价涨幅" in file_name:
  38. print(file_name)
  39. importFile(path + "\\" + file_name,date);
  40. time.sleep(3);
  41. os.remove(path + "\\" + file_name);
  42. def importFile(filename,date):
  43. conn1 = getConn1();
  44. cursor1 = conn1.cursor();
  45. inwb = openpyxl.load_workbook(filename);
  46. sheetsname = inwb.sheetnames;
  47. ws = inwb[sheetsname[0]];
  48. rows = ws.max_row -1;
  49. cols = ws.max_column;
  50. print(rows);
  51. print(cols);
  52. i = 2
  53. value = "";
  54. while i <= rows:
  55. code = ws.cell(i,1).value;
  56. name = ws.cell(i,2).value;
  57. zf = ws.cell(i,5).value;
  58. type_name = ws.cell(i,9).value;
  59. notions = ws.cell(i,7).value;
  60. sz = ws.cell(i,18).value;
  61. amount = ws.cell(i,15).value;
  62. if zf == "--":
  63. zf = "0";
  64. if sz == "--":
  65. sz = "0";
  66. if amount == "--":
  67. amount = "0";
  68. value += f"('{date}','{code}', '{name}','{zf}','{type_name}','{notions}','{sz}','{amount}'),";
  69. i = i + 1;
  70. pass
  71. value = value[:-1];
  72. sql = f"delete from k_data_jj ";
  73. cursor1.execute(sql)
  74. conn1.commit()
  75. if value != "":
  76. sql = f'INSERT into k_data_jj(date,code,name,zf,type,notions,sz,amount) VALUES {value}';
  77. count = cursor1.execute(sql)
  78. conn1.commit()
  79. inwb.close();
  80. def job():
  81. date = getDate();
  82. down(date);
  83. time.sleep(20);
  84. importAll(date);
  85. job();

5000多个股数据,10秒内导入完成,接下来就可以在数据库进行数据统计分析了


Demo下载https://download.csdn.net/download/gdgztt/87271607

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/78657
推荐阅读
相关标签
  

闽ICP备14008679号