们使用Power BI Desktop来制作上面这个图形,需要历年保险保费收入的数据作为依据,网站上有数据公布:
这个页面的地址:
/web/site0/tab5205/info4129096.htm
每个月都会有一个对应的地址,要到那里找到这些个地址呢?
我们找到了这样一个页面:
这个页面里有我们需要的每个月的数据的连接,这样的页面一共有8个,这8个页面的URL是连续的。
web/site0/tab5205/module14413/page1.htm
就是page1到page8
我们打开Power BI Desktop的Power Query,建立一个1到8的表
并且把ID这一列设置成文本,这是第一步。
第二步:要建立一个查询,从web获取数据,设置乘csv格式
复制地址栏里的公式,备用。(实在记不住这些函数,这样偷点懒,嘻嘻)
第三步:回到开始的表,自定义列,用刚才复制的公式,修改一下。
page后面的数字用ID替换一下。
第四步:数据清理,我们要的是每个月的URL,这个过程稍微有点复杂,但是用到的功能很简单,就是符号分列,筛选,替换。
1、用<a href="分列,会直接把我们需要的URL分离出来
2、筛选出带有info的行
3、再分列,用双引号分列
至此已经得到了我们想要的URL.
4、为了能够区分年月,还需要做些处理,取title后面的列,提取出来年和月,这部分就略过了。结果是这样的:
第五步:获取具体数据,如果不记得函数,还是先建立一个自web的查询,复制公式,然后自定义列。
用URL替换网址后面的部分。
第六步:展开并整理数据,这里要注意几个地方
1、删除列要修改一下,保留年和月两列
2、筛选掉所有的非省市名称的行
3、统一所有的省市名称,自己想想办法吧
4、逆透视列
最终的结果:
剩下的工作就回到Power BI Desktop用DAX建立度量值,作图就可以了。
总结一下,如果想从网页中获得需要的信息,就要抓住关键信息,Web信息有几种格式,要从源码中找信息,就用CSV格式,要找网页中的信息,就用HTML格式。不管用PQ还是PY网络抓取数据,都是一个找规律的过程,找到了规律,就能行。
存路径:D:\python\用Python读取csv文件中的沪深300指数历史交易数据
程序名称:readcsvhs300.py;
数据名称:沪深300指数历史交易数据.csv;
开发环境:Win7;
开发工具:Python 3.8.2 IDLE;
Python安装路径:D:\python。
在浏览器中打开网址http://quotes.money.163.com/trade/lsjysj_zhishu_399300.html,于网页的右侧点击下载数据按钮,下载沪深300指数历史交易数据,其下载界面如图1所示:
图1:沪深300指数历史交易数据的下载界面图
将下载结果保存到保存路径下,命名为:沪深300指数历史交易数据.csv。
用Excel打开沪深300指数历史交易数据.csv文件,查看下载的沪深300指数历史交易数据,效果如图2所示:
图2:用Excel打开沪深300指数历史交易数据.csv的效果图
运行Python 3.8.2 IDLE开发工具,编程读取csv文件中沪深300指数历史交易数据的源代码,将源代码保存到保存路径下,命名为:readcsvhs300.py。
源代码及其注释如下所示:
import csv #导入csv模块
csv_file=csv.reader(open('沪深300指数历史交易数据.csv','r')) #以只读方式打开csv文件
csv_content=[] #定义存储整个csv文件的列表
for line in csv_file: #按行对csv文件进行循环
csv_content.append(line) #按行将csv文件读取到列表中
for line in range(0,20,1): #对前20行进行循环
print(csv_content[line][0]+' '+csv_content[line][3]) #打印每行的第0列和第3列
在Python 3.8.2 IDLE开发工具中,按F5键,运行readcsvhs300.py程序,运行结果如图3所示:
图3:用Python读取csv文件中的沪深300指数历史交易数据运行结果图
ablib 是 requests 库作者常年维护的一个 python 第三方库,可以操作 Excel 等多种文件格式变成一种通用数据集。
tablib 支持的主要数据格式有:
tablib 操作测试用例的基础使用非常简单,你只需要记住以下 2 点:
with open('demo.xls', 'rb') as f:
# 接受 2 个参数,读出来的数据和读取的文件格式
data = tablib.import_set(f.read(), 'xls')
print(data)
复制代码
data = tablib.Dataset(*data_list, headers=headers,title='测试用例')
复制代码
现在来进行更精确的操作:
先通过加载 Excel 文件获取到数据
a = tablib.import_set(f.read(), 'xls')
复制代码
a 得到的是一个列表,每个元素是每一行数据。
# 获取第一行第一列
print(a[0][0])
# 获取第一行的 url 列
print(a.dict[0]['url'])
# 获取前 2 行
print(a[:2])
复制代码
print(a['url'])
复制代码
with open('demo_book.xls', 'rb+') as f:
a = tablib.import_set(f.read(), 'xls')
print(a)
# 添加行
a.append(['zhiwang', 'put', '成功'])
# 在指定行插入
a.insert(2,['zhiwang', 'put', '成功'])
with open('demo_book.xls', 'wb') as f:
f.write(a.xls)
print(a)
复制代码
# 在最后添加
a.append_col(['成功','失败', '失败'], header='actual_result')
# 在指定位置添加列
a.insert_col(3,['成功','失败', '失败'], header='actual_result')
复制代码
# 修改某一行数据
a[0] = ('baidu', 'put', 'shibai', 'shibai')
# 修改某个具体的数据
a._data[0][0] = 'wobuzhidao'
复制代码
注意:不要在代码里直接操作 a._data, 可以封装成方法。
在测试过程中,我们经常需要执行冒烟用例。或者给测试用例打标签,比如登录功能,成功用例,异常用例等等。tablib 通过 tags 关键字方便删选指定的测试用例来执行。
# 添加标签
a.append(['buzhi', 'put', 'c','c'], tags=['成功'])
# 获取所有‘成功’的测试用例
success = a.filter(tag='成功')
复制代码
# 将测试用例的标签修改成‘失败’
a._data[0].tags = ['失败']
# 获取所有‘失败’ 的测试用例
failed = a.filter(tag='失败')
print(failed)
复制代码
a.remove_duplicates()
复制代码
测试数据最常用的功能是需要切换格式,比如把 Excel 格式的数据切换成 YAML , 这个在接口自动化测试框架 httprunner 中经常用到。还是用 a 来表示 DataSet 数据:
with open('demo.yml', 'w', encoding='utf-8') as f:
f.write(a.yaml)
复制代码
with open('demo.yml', 'r') as f:
a = tablib.Dataset().load(f.read(), format='yaml')
print(a.html)
复制代码
效果:
651 x 193
with open('demo.html', 'w', encoding='utf-8') as f:
f.write(data.html)
复制代码
效果:
728 x 188 879 x 227
with open('demo.json', 'w', encoding='utf-8') as f:
f.write(data.json)
复制代码
效果:
[
{
"url": "baidu",
"method": "get",
"expect": "failed"
},
{
"url": "lemon",
"method": "post",
"expect": "success"
}
]
复制代码
tablib 这个库非常灵活,用法非常好记,完全符合我们对 Excel 的理解。非常适用于 python 自动化测试的用例数据管理。只有一个缺点:中文资料太少。后面我会翻译一些优秀的英文文档,让更多人把这个优秀的库用起来。
最后:【可能给你带来帮助的教程】(私聊q1领取)
这一些资料,对做【软件测试】的朋友而言应该是较为完整了,这类学习资料也陪伴我走过了最艰难的路程,希望也可以帮助到你!万事要尽早,尤其是技术行业,一定要提升技术功底。
*请认真填写需求信息,我们会在24小时内与您取得联系。