【Python】Selenium辅助海量基金数据获取
时间:2022-05-05
本文章向大家介绍【Python】Selenium辅助海量基金数据获取,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天主要给大家介绍一下Selenium测试工具,它是一款浏览器测试专用的工具,能够模拟用户对浏览器进行鼠标点击、页面滑动等功能。一方面能够用于网页测试,另一方面能够辅助网页内容爬取(例如通过滑动页面置底通过Ajax自动加载的页面内容,或通过点击Button才能下载的内容等)。
本文主要介绍Selenium辅助海量基金数据的获取。以腾讯证券为例进行说明(网址:http://stockhtm.finance.qq.com/fund/jzzx/index.htm),对应页面如下所示:
通过上图可以看到,我们需要在页面输入历史数据对应的时间,以及按键“输出到EXCEL”才能导出对应的历史数据。需要使用Selenium,(1)找到历史数据的context控件,输入对应的时间;(2)找到“输出到EXCEL”的Button控件名,并按下Button控件。
- HTML页面查看,找到各控件名称(Context对应"textfield",Button对应"Submit02")
- 获取2017年3-8月半年的基金数据。得到各日期,针对每一天进行输入日期、导出数据到Excel操作。
elem = driver.find_element_by_name("textfield") #通过id找到日期输入框的
elem.clear() #内容清空
elem.send_keys(date) #date是输入的日期
elem1 = driver.find_element_by_name("Submit01") #确定输入的日期
action1 = ActionChains(driver).move_to_element(elem1)
action1.click(elem1)
action1.perform()
elem2 = driver.find_element_by_name("Submit02") #导出数据到excel
action2 = ActionChains(driver).move_to_element(elem2)
action2.click(elem2)
action2.perform()
3. 数据可视化,通过使用baidu的echart工具,对获取的数据进行可视化展示。
(1)所有基金增长每日总量的变化趋势图:可以看出八月份(最后三十天)基金大幅度增长
(2)每天增长的基金数量占所有基金比例的变化趋势,可以看出80-144天时超过半数的基金在涨。
(3)每天所有基金价格增长的总和如下:
代码附录:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
dates = []
Stri = "20170"
Mon = [1,3,5,7,8]
for i in range(3,9):
if i in Mon:
N = 31
else:
N = 30
for j in range(1,N+1):
if j <10:
tmpS = '0'+str(j)
else:
tmpS = str(j)
dates.append(Stri+str(i)+tmpS)
driver = webdriver.Chrome()
driver.get("http://stockhtm.finance.qq.com/fund/jzzx/index.htm")
elem = driver.find_element_by_name("textfield")
for dat in dates:
elem.clear()
elem.send_keys(dat)
elem1 = driver.find_element_by_name("Submit01")
action1 = ActionChains(driver).move_to_element(elem1)
action1.click(elem1)
action1.perform()
elem2 = driver.find_element_by_name("Submit02")
action2 = ActionChains(driver).move_to_element(elem2)
action2.click(elem2)
action2.perform()
# -*- coding: utf-8 -*-
import os
import numpy as np
import pandas as pd
from pyecharts import Line
def Getfile(dirName):
'''
获取文件夹数据
'''
files = os.listdir(dirName)
return files
def ReName(path,files):
'''
文件重命名
'''
for f in files:
os.rename(dirName+f,dirName+f[9:])
def PlotLine(line,datx,daty,Marker):
'''
绘制线型图像
'''
#line = Line(Title)
line.add(Marker,datx,daty, mark_point=["average","max"])
#return line
#line.show_config()
#line.render()
def CalIncRate(NewFiles):
'''
计算每日增长基金占比
'''
dayInc = []
dayIncVal = []
mk = 0
for f in NewFiles:
mk += 1
print mk
data = pd.read_html(dirName+f)
Inc = data[0][5][1:]
IncVal = map(float,data[0][4][1:])
dayIncVal.append(sum(IncVal))
cnt = 0
for rate in Inc:
if float(rate) > 0:
cnt += 1
dayInc.append(cnt/float(len(Inc)))
return dayInc,dayIncVal,np.cumsum(dayIncVal)
def CalIncNum(NewFiles):
'''
计算每日总基金增长点
'''
dayIncNum = []
return dayIncNum
dirName = u'./股票型基金/'
NewFiles = Getfile(dirName)
dayInc,dayIncVal,dayIncCum = CalIncRate(NewFiles)
line = Line("每日增长基金占比","3月-8月")
PlotLine(line,range(len(dayInc)),dayInc,"比例")
line.show_config()
line.render('h1.html')
line = Line("每日基金增长总量","3月-8月")
PlotLine(line,range(len(dayInc)),dayIncVal,"增长量")
line.show_config()
line.render('h2.html')
line = Line("基金累计增长总量","3月-8月")
PlotLine(line,range(len(dayInc)),list(dayIncCum),"增长累积量")
line.show_config()
line.render('h3.html')
- Shell编程——Shell中的数学运算
- 如何利用微信监管你的TF训练?
- python 安装spark_Spark环境搭建 (Python)
- MongoDB触发oom-killer的简单处理(一)(r7笔记第54天)
- int与integer的区别
- java 自动装箱与拆箱
- python读取文件——python读取和保存mat文件
- python 利用递归实现全排列
- java中 == 与 equal 的区别
- python基础知识——字符串
- python 实现数据降维推荐系统(附Python源码)
- MYSQL数据导出与导入,secure_file_priv参数设置
- numpy 参数(一) —— np.linalg
- 关于查看dba_data_files的一个小问题(r7笔记第72天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 最全总结:把模块当做脚本来执行的 7 种案例及其原理
- 经典八种排序算法总结(带动画演示)
- bokeh作图过程报错解决方法兼Pycharm如何升级安装包的方法
- 一、html 基础
- 二、css3基础
- 三. CSS layout(布局)
- 四. css 布局之 float
- Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示
- 详细讲解!从JVM直到类加载器
- PyQt5 图形界面-实现按钮监听事件
- Python 技术篇-文件操作:文件的读取和写入
- Salesforce Javascript(一) Promise 浅谈
- Python 技巧篇-英文单词首字母大小写转换功能实例演示,字符串切片实现
- 5千字的SpringMVC总结,我觉得你会需要
- 【原创】Java并发编程系列36 | FutureTask