這一段時間寫了很多篇網絡抓取方面的文章,很多網友可能對網絡抓取還有疑慮,是不是游走法律邊緣,擔心跨省。其實我們用Power Query進行的網絡抓取行為,大部分都是正常的數據收集工作,我們并沒有突破防御從后臺下載數據,那些都是黑客做的事情。Power Query網絡抓取,都是通過正常的網頁訪問來獲取數據,只是比起手工翻頁稍微自動化了一些。
數據類型
如果從抓取的數據類型的角度來區分,我們分為兩大類:

- 網頁:文本格式的頁面內容,從中提取表格或文本
- 數據:主要是json格式的數據,如果你有數據庫的賬戶和密碼,Power Query也有對應的數據庫接口,獲取數據也是很方便的。
抓取步驟
如果從抓取步驟來分類也是兩步:

為什么不是我們經常說的四步變成兩步了?
這里所說的步驟單指我們M函數在網絡抓取中的步驟。
第一步:抓取網頁內容,都是Contents,結尾的M函數
第二步:分析網頁內容,對第一步抓取過來的網頁內容進行解析,文本、json、xml、csv、表格等等。
我們在之前的網絡抓取文章中很少提到具體的函數,因為大部分的網絡抓取函數應用,都是Power Query自動給我們生成,回過頭來看看,就是我們現在看到的這個樣子。
所以說,網絡抓取兩大核心工作:
- 內容抓取是建立在網站分析的基礎之上;
- 內容呈現是選擇合適的方式對網頁內容解析,并作適當的格式處理。
M函數
我們常用到的函數組合:

這里簡單說一下:
- Web.BrowserContents返回的是文本格式,可以直接用Text類函數來處理,也可以用其他幾種數據格式來解析。
- Web.Contents返回的是二進制格式,用數據格式解析
- AzureStorage.BlobContents返回的也是二進制格式,BLOB(binary large object)這個我也是在做COVID-19數據抓取時才注意到的,我們就理解為附件吧,圖中的url直接就是一個文件的地址,在網絡抓取需要直接讀取附件內容時可以考慮使用這個函數。

綜上所訴,Power Query網絡抓取并不是很復雜,復雜的是網站千奇百怪,各有各的不同,所以我們要做好網站分析,不斷嘗試,總會找到辦法的。