因為在Excel裡面難以實作自動登入
今天介紹一種用PowerQuery爬取生意參謀資料的方法,隻作學習用,拓展一下思維,切忌大量爬取生意參謀資料,以免被封!
需要用到M語言的幾個函數:
Json.Document() 用來解析Json代碼
Web.Contents(url,[Headers=headers,Query=query]) 用來擷取頁面資料
首先找到想要爬取的資料,此文以爬取生意參謀-首頁-整體看闆的資料為例。

想要爬取資料,首先要找到資料在哪裡。
滑鼠右擊網頁任意位置,選擇“審查元素,或者”按F12健。
點選”Network”,然後點選”XHR”,資料就藏在左側的檔案中,可以依次點選檢視。
發現資料在getTrend.json這個檔案下,在Preview标簽中可以看到我們要爬的資料。
接下來我們需要擷取3部分内容,URL,Headers,Query。點選Headers标簽。
标紅的部分是我們需要的内容(Headers部分從cookie開始複制,前面部分不需要),為便于編輯,可以把這3部分内容分别複制粘貼到記事本。
上圖對代碼的含義做了簡單說明。接下來需要将3段内容進行簡單的處理,以便PowerQuery能夠正确識别。
先把輸入法切換到英文狀态。
url部分用“”引起來。
Headers部分,冒号左側的内容用引号引起來,左邊加上井号;冒号右側的内容用引号引起來,冒号替換成等于号;cookie、referer和user-agent這3段之間的換行符删掉,然後用逗号隔開;最後把整體用[ ]括起來。
這段沒看懂沒關系,下面再講一遍。
冒号兩端用引起來
左邊加井号
冒号換成等于号
删掉換行符,用逗号隔開。
整體用方括号括起來
3部分内容加工完畢,接下來打開Excel。
點選“資料“頁籤-”建立查詢“-”從其他源“-“空白查詢”
此時打開了查詢編輯器(PowerQuery),現在需要一個自動生成時間戳的列。點選“進階編輯器”
打開了進階編輯器,将等号右邊的内容替換成以下内容:
Number.IntegerDivide(Duration.TotalSeconds(DateTime.LocalNow()-
#datetime(1970,1,1,8,0,0)),1)
點選“已完成”按鈕。
出現了時間戳的字段,點選“到表”按鈕。
變成了表格形式,将列名重命名成“時間戳”
單擊列名左側圖示,将字段類型設定成文本。
在url和query代碼中,需要把包含時間戳的字段進行替換,以識别成對應的單元格。
中括号兩邊用&連接配接,外面需要被引号引起來。
接下來最關鍵的一步,把要爬取的資料解析出來。添加自定義列。
在自定義列公式中輸入
Json.Document(Web.Contents(url,[Headers=headers,Query=query]))
先不要着急點确定,需要把url,headers,query這3個單詞替換成上文整理好的3段對應代碼。
然後點選“确定”按鈕。
出現警告,不必擔心,點選“繼續”。
在彈出的隐私級别視窗中,點選右側下拉箭頭,選擇“公共”,點選“儲存”。
解析出了Record字段。點選右邊的雙向箭頭圖示,點選“确定”按鈕。
繼續點選雙向箭頭圖示,點選“确定”按鈕。
繼續點選雙向箭頭圖示,點選“确定”按鈕。
滑鼠右擊Record這一列的列名,選擇“删除其他列”。
點選雙向箭頭圖示,可以把使用原始列名作為字首前面的勾去掉,點選“确定”按鈕。
表格變成了這種形式,此時不能直接将資料展開,需要改變一下形式,将List字段變成一列。
将3列選中(先點選第一列列名,選中第一列,按住Shift健,再選中最後一列),點選“轉換”标簽中
的“逆透視列”按鈕,進行逆透視。
變成這種形式,然後點選雙向箭頭按鈕。
點選“擴充到新行”。
得到了我們想要的資料。
文章到此結束。
本文重點在于解析的過程,提供一種爬蟲的思路,後續資料清洗和整理過程不再贅述。
本文隻爬取了支付金額,想同時爬取更多資料,可以在indexCode=payAmt後面添加其他名額代碼即可,如indexCode=payAmt,uv即可同時爬取支付金額和訪客數。
最後提醒:切忌大量爬取生意參謀資料,以免被封!切記!切記!