如何删除第一张单页_如何用PowerBI导入网页数据
作者: 東軍
相信很多朋友被PBI顏值吸引而入了坑,迫切想上手,但往往會卡在數據源環節。本公司數據自己沒權限,外公司數據可望不可及,而網絡社區里提供的練習數據,往往專業性太強,業務邏輯摸不透,分析更是無從下手。
那有什么辦法能方便快捷地找到貼近我們生活的數據嗎?
今天咱們就以隨處可見的榜單類數據為例,如何通過PBI來導入網頁數據,快速建立屬于自己的數據源。
一、導入單頁數據(無參數)
單張網頁的數據導入,其實馬世權老師《從Excel到Power BI商業智能數據分析》一書已有過展示(第97頁的3.3章節)。這里咱們換個網頁,重新走一遍流程,溫故而知新。
這里以當當網圖書暢銷榜為例(一共25頁,每頁20本書。本節僅針對第一頁)。2019年8月暢銷榜網址:http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1
1. 獲取Web數據
2. 復制粘貼網址,確定
3.選中-轉換
導航器里出現兩張表,很容易就可以判定第一張表就是我們想要的。選中-轉換
4. 數據導入成功
根據分析需要,可以在PBI編輯器里作下一步清洗處理(可參見馬世權老師《從Excel到Power BI商業智能數據分析》第70頁“數據搬運工”章節)
由于網頁數據復雜多變,上述步驟三里還會出現大量重復、殘缺的表格信息。甚至有時候相同網址,分別用PBI和EXCEL來導入,網頁分析結果還有差異。這時就需要耐心仔細,挑選出相對完整的表格數據導入即可。
二、導入多頁數據(僅頁碼參數)
剛才我們成功導入了單頁數據,也熟悉了一遍流程。顯然單頁數據量還達不到數據分析的起步要求,那如何把上述榜單的二十五頁明細全部導入呢?
我們在網頁的頁碼鏈接處前后點幾次,觀察網址變化就會發現,關鍵在于網址最后一個數字。http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2019-8-1-1
在網頁數據導入的所有步驟中,有兩個環節最為重要:
a) 如何判定鏈接與網址的對應關系。
b) 如何判定網址中哪些是關鍵字符串。
這兩個環節,常規網站一般沒什么難度,仔細對比就能找到規律。而有些網頁就不那么好對付了(尤其像一些財經類網站,基金/股票的排行榜,可以自己去摸索一下),需要用額外工具來解析,這個不是咱們今天討論的重點,暫且忽略。
既然找到了關鍵環節,那問題就簡單了。前四個步驟(獲取、復制粘貼網址、選中、導入)與導入單頁數據相同,不再贅述。我們把已導入的數據表重命名(盡量避免出現諸如表1、查詢2、函數3,參數4之類的名稱)。
多頁數據導入的思路:
- 先設定參數。
本例固定變化的是頁碼,因此只1需設置一個頁碼參數即可; - 再來一個自定義函數;
- 把參數代入函數;
- 展開函數,得到最終結果。
1234步驟參照單網頁導入,我們從步驟5開始
5. 創建頁碼參數
6.插入頁碼參數
雙擊第一步驟“源”后面的小齒輪,打開數據獲取界面,切換到“高級”選項。把URL文本的最后一個字符去掉,用剛創建的頁碼參數代替。
7. 創建自定義函數
在初始表上單擊右鍵,選擇“創建函數”菜單。函數名稱隨意。
8. 創建頁碼列表
(目的在于告訴PBI,列表里每項數值都代入頁碼參數,后續調用函數時就能以此生成25個網址字符串,PBI就會根據這些字符串,去自動鏈接相關網址)
1) 新建“空查詢”。
2) 在公式欄里輸入“= List.Numbers(1,25,1)”,PBI將生成一個等差數列。其中第一個“1”為起始數字,第二個“25”為尾數,第三個“1”是差額。
3) 在新列表的標題欄里右鍵“到表”,將列表轉換為表(公式欄里的“Table.FromList”是自動生成的)。
4) 將查詢名和列表標題欄重命名,方便后續操作辨識。
5) 將該列數據類型轉換為“文本”(對應上述步驟5的參數類型),數字便自動靠左對齊。
9. 調用自定義函數
1) 仍然選中“頁碼列表”,點擊“添加列-調用自定義函數”,按下圖所示設定。
2) 忽略“隱私級別”。
3) 經過數據加載,結果終于顯現。25個頁碼,每行對應了一個Table,每個Table里都有相應的二十條數據。隨意點擊一個Table就能看到。
10. 展開函數
點擊新列右上角符號,即可展開所有25行共計500條數據。如果大家覺得“Column”太多容易混淆,那就直接在步驟4把數據先清理好,保留或刪除哪幾列,重命名并指定數據類型等。
雖然只有10個步驟,但對初學者來說,可能操作一趟下來還是一頭霧水。
咱們最后再來總結一下。對于多頁數據的導入,可以看作中學生列方程式。
1) 先設未知數x(第五步創建參數)
2) 再列方程y=…x…(第七步創建自定義函數)
3) 把x可能出現的值全部寫出來(第八步創建頁碼列表)
4) 把每個x的值代入方程,算出y值(第九步調用自定義函數)
真正的掌握離不開大量練習,只有實操才能進步。除了當當網,再給大家幾個網址來練習:
豆瓣電影榜單:https://movie.douban.com/top250
豆瓣音樂榜單:https://music.douban.com/top250
豆瓣讀書榜單:https://book.douban.com/top250
全球影史票房榜:https://www.boxofficemojo.com/alltime/world/
國內居民消費價格指數(CPI):http://data.eastmoney.com/cjsj/cpi.html
三、導入更多數據(包含兩個以上參數)
兩個或兩個以上參數的情況,原理也一樣。本節將提供兩套方案,建議初學朋友把兩種方法多操練幾次。熟悉的目的不是死搬硬套,而是今后遇到陌生情況,能多一條思路。很多從未碰到過的棘手問題,能開辟新思路的畢竟是少數大咖,咱們普通人一般都是把舊思路老經驗多結合幾次,基本也能解決。
這回我們拿起點中文網的“原創風云榜”來做演示。
https://www.qidian.com/rank/yuepiao?style=2&page=1
仔細觀察這個頁面,單就“原創風云榜”就有四個參數:年、月、分類、頁碼。
本節我們只考慮“分類”和“頁碼”兩者組合,年月參數留給各位自己演練實操。只要熟悉了兩個參數的導入流程,參數再加幾個也沒多大難度。
分類共有十四個,每個分類有兩頁。為了便于對比,我把十四個分類的URL都復制到一起:
這樣一看就很清楚了,URL中關于頁碼的信息是“page=”,分類的信息是“chn=”。既然參數確定了,那二話不說,動手干起來。
實操啦,跟進腳步,同志們!
方案一
1. 獲取Web數據
2. 復制粘貼網址,確定
3. 選取表格,點擊“轉換數據”
4. 數據導入成功后處理
稍微做一些整理:刪除最后一列“操作”,把第二列“類別”中的豎括號“「」”替換掉,“表1”重命名為“初始表”。
5. 創建頁碼參數和分類參數
(參數“類型”必須設為“文本”)
6. 插入URL字符串
回到初始表,將兩個參數插入URL字符串(雙擊第一步驟“源”后面的小齒輪,打開數據獲取界面,切換到“高級”選項。把URL文本中分類和頁碼數值,用剛創建的兩個參數代替)
7.創建自定義函數
在初始表上單擊右鍵,選擇“創建函數”菜單。函數名稱隨意。
8. 創建頁碼列表和分類列表
(與第二章節相同,不再重復截圖)新建“空查詢”,頁碼列表公式“= List.Numbers(1,2,1)”,分類列表公式“= List.Numbers(1,22,1)”。本步驟有三個動作千萬別忘:查詢轉換到表;數據類型轉換成文本;標題欄重命名“PageList”和“Catalog”。
這兒有個問題。十四個分類數值明明不連續,為什么我在這兒要用公式來生成連續數值。
其實我就是想偷懶。對于參數的不連續數值,可以用“輸入數據”來一個個手動輸入。我嫌麻煩,不如自動生成連續數值,在后續選取步驟中,把無用數值前復選框的勾去掉即可。
9. 調用自定義函數
(本步驟是重點,多參數與單參數的最大不同之處,就在這一步)
如果按第二章調用函數的方法,就會發現問題所在。由于存在2個參數,因此調用自定義函數過程中,必須要同時安置兩個參數。但無論在“頁碼列表”還是“分類列表”上調用,對話框里都只出現一個參數選項,這該如何是好?
回顧前面提到的單參數思路,我們把參數當作x,自定義函數看作y,把x的每一個實例數值代入函數,y就能得到一個URL字符串。本章的雙參數要實現同樣效果,是不是就等同于實現雙參數的笛卡爾積呢?
思路有了,那就動手。在“分類列表”上添加自定義列,列公式為“=頁碼列表”。展開自定義列,得到了我們想要的結果。這時就可以把無用的分類去掉。
10. 展開函數
此時再在“分類列表”上調用自定義函數,便水到渠成。
至此,雙參數網頁數據的導入操作就完成了。有興趣的朋友可以自己加入年和月參數繼續折騰。
方案二
第二種方案,不用事先導入數據,不用預先設置參數,也不用自定義函數。僅需幾步DAX便能實現,簡單粗暴。
1. 創建分類列表
此處截圖從簡,詳情可以參考前面章節。
1) 新建“空查詢”
2) 輸入公式“= List.Numbers(1,22,1)”
3) 轉換查詢到表
4) 數據類型設為“文本”
5) 標題欄重命名為“分類”
2. 自定義列“起始頁碼”
前面我們說過,分類和頁碼列表的目的是為了實現分類和列表數值的笛卡爾積。為了實現這個效果,就需要先添加兩個臨時列。自定義列“起始頁碼”,將該列數據類型設為“整數”。
3. 自定義列“結尾頁碼”
為什么要添加兩個臨時列?因為我們想通過M語言的Number.From公式,來實現起始頁到結尾頁的自動填充。同理,在日期場景中,也可以用該公式來填充起始到結束日期之間的每一天。
4. 自定義列“頁碼”
這里公式“={Number.From([起始頁碼])..Number.From([結尾頁碼])}”不是DAX,而是M語言,注意大小寫敏感。公式里的列名稱,只需在右側“可用列”里雙擊即可,不需手動輸入。
5. 展開“頁碼”列,點擊“擴展到新行”
6. 完成笛卡爾積
將“頁碼”列數據類型改為“整數”;將“分類”列無關數值去掉勾選;刪除“起始頁碼”和“結尾頁碼”兩個臨時列。笛卡爾積就完成了。
7. 自定義列“URL”
這里我們也用了M語言,注意大小寫敏感。公式:
Web.Page(Web.Contents("https://www.qidian.com/rank/yuepiao?style=2&chn="&[分類]&"&page="&[頁碼]))
8. 展開URL列,僅保留Data勾選。確定后發現還有Table在里面,那就繼續展開。第二次展開便得到了最終結果,稍做清理,便大功告成。
是不是眼前一亮?明明八個常規步驟就能解決的問題,非要在前面章節嘮叨那么多,小編腦子撞墻了嗎?
好吧,你們人多嘴多拳頭硬,小編嘴軟手軟嘰嘰軟,拼不過你們。不過我還是要辯解一番,或許在PBI導入網頁數據這塊,確實光憑幾句DAX和M公式就能快速實現要求,但咱們的目的是什么?前面也講過,是為了多條思路嘛,預設參數函數這種操作,摸透性格捋順脾氣,或許其他場景就能派上大用處。
作者介紹:
總結
以上是生活随笔為你收集整理的如何删除第一张单页_如何用PowerBI导入网页数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python online course
- 下一篇: layui分页limit不显示_layu