用excel的巨集程式碼是可以簡單的抓取靜態網頁的資料的,但是在形形色色的網站中總有些異類,這些網站的資料是通過外部的js檔案生成的,而這個js更會是進行過防盜鏈處理的。以和訊部落格為例,網站中我們需要閱讀數和評論數,但是靜態的網頁原始碼中並沒有顯示這兩個資料。
工具/原料
chrome瀏覽器
Microsoft Excel
方法/步驟
首先用chrome登入網頁,並且按F12開啟開發者工具並重新整理頁面
之後點選開發者工具的“Network”選項卡,再點選“js”選項卡,可以看到很多的js檔案,這些都是該網頁請求的外部js。
依次點選這些JS檔案並且檢視,會看到預覽中有如下這個document.getElementById("articleClickCount").innerHTML = 1409; document.getElementById("articleCommentCount").innerHTML = 6;這就是我們要抓取的閱讀數和評論數
把這個js的網站新連結提取出來,經過和原來的連結進行對比可以用虛擬碼寫成:
新連結 = "; & Split(Split(原始連結, "/")(3), "_")(0) & "&blogid=0"
開啟excel,再alt+f11開啟巨集編輯器,在模組中寫入如下程式碼
Sub 網頁抓取()
For Each a In Selection
URL = "http://click.tool.hexun.com/click.aspx?articleid=" & Split(Split(a, "/")(3), "_")(0) & "&blogid=0"
Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
With xmlhttp
.Option(6) = 0
'
.Open "GET", URL, False
.setRequestHeader "Referer", a
.setRequestHeader "Connection", "Keep-alive"
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
.SEND
a.Offset(0, 1) = .responsetext
End With
Set xmlhttp = Nothing
Next
End Sub
回到excel介面,在a1單元格中輸入網址
選擇a1單元格,按alt+f8彈出巨集,並且執行巨集“網頁抓取”
之後會在B1單元格彈出結果
注意事項
防盜鏈的要點在於設定請求的標頭檔案,.setRequestHeader "Referer", a ;.setRequestHeader "Connection", "Keep-alive" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
基礎的網頁抓取自行搜尋,限於篇幅不做過多講解。