作者:iamlaosong
我前一陣子用VBA做了兩個工具,用XMLHTTP的Get功能和Post功能抓取網頁數據,還用這個對象的Get功能通過HTTP接口獲取數據,這兒總結一下:
1、Get功能抓取網頁數據,參數名稱和值放在鏈接之中,方法如下:通過不同的變量值(sn和en)構造不同的鏈接,獲取不同的數據。
hp1 = "http://api.map.baidu.com/?qt=nav&c=1&sn=2$$$$$$"
hp2 = "$$$$&sy=0&ie=utf-8&oue=1&fromproduct=jsapi&res=api&callback=BMap._rd._cbk92197"
http = hp1 & sn & "$$$$&en=2$$$$$$" & en & hp2
xh.Open "get", http
xh.send
rt = xh.responseText
通過不同的變量值(sn和en)構造不同的鏈接,獲取不同的數據。
參見:【VBA研究】用XMLHTTP的Get功能通過百度接口抓取城市間距離
2、Post功能抓取網頁數據,鏈接參數名稱和值放在變量之中,代碼如下:通過發送不同的變量值(pdata)獲取不同的數據。
http = "http://10.xxx.xxx.xxx/querypush-traln/qps/qpswaybilltraceinternal/queryTraceByTrace_no/"
pdata = "trace_no=1044905987232"
HttpReq.Open "Post", http, False
HttpReq.setRequestHeader "Content-Length", Len(pdata)
HttpReq.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded; charset=utf-8"
HttpReq.send pdata
Debug.Print HttpReq.responseText
通過發送不同的變量值(pdatan),獲取不同的數據。
3、Get功能從HTTP接口獲取數據,接口通過請求包頭參數實現授權和接口版本,代碼如下:
HttpReq.Open "Get", "http:// IP:Port/invoke/path/" & LTrim(mail), False
'下面的驗證屬性參數pppppppp1,2換成真實的屬性值,通過這個參數實現授權和版本
HttpReq.setRequestHeader "Authenticate", "pppppppp1"
HttpReq.setRequestHeader "Version", "pppppppp2"
HttpReq.send
MsgBox HttpReq.responseText
通過不同的變量值(mail)構造不同的鏈接,獲取不同的數據。
HTTP接口和網頁抓取是一樣的,因爲網頁也是這個協議。