動態資料、防盜鏈的網站如何用Excel抓取?

用excel的巨集程式碼是可以簡單的抓取靜態網頁的資料的,但是在形形色色的網站中總有些異類,這些網站的資料是通過外部的js檔案生成的,而這個js更會是進行過防盜鏈處理的。以和訊部落格為例,網站中我們需要閱讀數和評論數,但是靜態的網頁原始碼中並沒有顯示這兩個資料。

動態資料、防盜鏈的網站如何用Excel抓取

動態資料、防盜鏈的網站如何用Excel抓取

工具/原料

chrome瀏覽器

Microsoft Excel

方法/步驟

首先用chrome登入網頁,並且按F12開啟開發者工具並重新整理頁面

動態資料、防盜鏈的網站如何用Excel抓取

之後點選開發者工具的“Network”選項卡,再點選“js”選項卡,可以看到很多的js檔案,這些都是該網頁請求的外部js。

動態資料、防盜鏈的網站如何用Excel抓取

依次點選這些JS檔案並且檢視,會看到預覽中有如下這個document.getElementById("articleClickCount").innerHTML = 1409; document.getElementById("articleCommentCount").innerHTML = 6;這就是我們要抓取的閱讀數和評論數

動態資料、防盜鏈的網站如何用Excel抓取

把這個js的網站新連結提取出來,經過和原來的連結進行對比可以用虛擬碼寫成:

新連結 = "; & Split(Split(原始連結, "/")(3), "_")(0) & "&blogid=0"

動態資料、防盜鏈的網站如何用Excel抓取

開啟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抓取

回到excel介面,在a1單元格中輸入網址

動態資料、防盜鏈的網站如何用Excel抓取

選擇a1單元格,按alt+f8彈出巨集,並且執行巨集“網頁抓取”

動態資料、防盜鏈的網站如何用Excel抓取

之後會在B1單元格彈出結果

動態資料、防盜鏈的網站如何用Excel抓取

注意事項

防盜鏈的要點在於設定請求的標頭檔案,.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"

基礎的網頁抓取自行搜尋,限於篇幅不做過多講解。

網站, 資料, 網頁, 動態資料, 防盜鏈,
相關問題答案