們使用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小時內與您取得聯系。