用 Excel 爬取網絡數據的四個小案例
平時我們使用 Excel,經常是處理本地的數據,你懂得 Excel 的排序,篩選,條件格式,透視表,圖表等…… 但你可能不懂 Excel 怎麼獲取網頁上的數據!
你可能以爲一定要寫代碼才能實現,其實除了代碼外,Excel 還配有一些現成的功能,方便你不用代碼也能獲取網頁的數據!
本文就給大家介紹一下,不寫代碼也能用 Excel 獲取網頁數據的一些方法。
函數法
自 Excel 2013 版本開始,就推出了一些 Web 函數,其中有 2 個函數配合使用,就可以幫助我們獲取網頁的數據到 Excel
FILTERXML(xml, xpath) 從 XML 數據中返回指定的數據,網頁上的數據很多都是以 XML 的形式存在,這個函數就是用於提取 XML 中的指定信息。
WEBSERVICE(url) 返回 Web 服務中的數據,你可以理解爲可以獲得一堆的 XML 字符串。
例如下面的這個公式,就是使用有道翻譯的網站,可以獲取翻譯結果:
=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&B2&"&doctype=xml&version"), "//translation")
如果你複製以上公式到 Excel 後,你只需要在 B2 單元格輸入你要翻譯的內容,公式的運算結果就會返回翻譯的結果給你。
用函數獲取網絡數據
是不是覺得超級方便!但使用這個公式也需要注意,必須保證你的電腦能正常聯網,如果有道翻譯調整了網頁代碼,或者網址的入口改變了,那麼上面的這個公式也會失效,需要重新去研究邏輯再寫公式~
Query Table 獲取網頁數據
在 Excel 2016 以前,一直有一個 Query Table 獲取網頁數據的功能,但在 Excel 2016 推出 PQ 後就隱藏起來了,但是仍然可以通過手工調出來!
手工調出來的方法可以從「選項」中的「數據」裏去設置,也可以直接通過快捷鍵 Alt → D → D → W(注意:不需要同時按,只需按順序按下去即可!),然後就會彈出以下的界面:
打開目標網頁
然後我們只需要輸入網頁地址,圖中演示的是 http://quotes.money.163.com/trade/lsjysj_600519.html#06f01 這個地址。
這個工具就能夠幫我們識別網頁中的表格,然後我們只需要選中表格(點黃色箭頭去選),點右下角的導入,然後就可以把數據導入到 Excel 中!
而且你還可以刷新這個表格,同時支持手動刷新和自動刷新,非常的方便~
可刷新的 Query Table
這個方法要注意的問題是,並不是所有的網頁都可以獲取到數據,因爲你不一定能拿到真實的網頁地址,所以你要儘量找到最深入的那個地址。你有辦法爬,別人也有辦法反爬,所以持續地獲取網頁的數據,就需要密切關注網頁是否有變化~
Power Query 獲取網頁數據
自從 Excel 2016 開始,PQ 就集成在 Excel 中,並且計劃用它來替換舊版的數據查詢獲取功能,所以用 PQ 也可以幫我們獲取網頁的數據!
自網站獲取數據
因爲動圖太大,無法上傳,所以我就用截圖去說明步驟:
1、點擊上面的 “自網站”,輸入網址,按下 “確定”
填入網址
2、在出現的導航器中,點擊 Table 開頭的圖標,右側就會有這些表格的預覽,選擇你要導入的表格,按右下角的 “加載”
選擇要加載的表格
3、然後就能獲取表格數據到 Excel 了,也是支持手動刷新和自動刷新的!
pq 獲取網絡數據
VBA 代碼法
VBA 的方法當然也可以,而且是最後壓軸出場!使用 VBA 獲取網頁數據,首先當然是可以和上面的三種方法去結合使用,因爲寫代碼意味着你可以判斷,可以循環。也就是說像上面的股票收盤價信息,你就可以通過循環獲取多個股票的數據了,會更方便!
對於零售行業來說,天氣是很重要的因素,會影響客流,會影響應季貨品的銷售,所以結合歷史天氣數據進行分析是很有必要的!那怎麼批量地獲取天氣數據呢?
這就需要用到 VBA 代碼了,以上的辦法都不適合大批量地獲取數據,不會代碼?沒關係,我已經寫好了,而且也有解釋,大家只要稍作修改即可使用,用 VBA 調用 Query Table 來實現:
Sub Tianqi()
Dim str As String
On Error Resume Next
Cells.Delete
t1 = Time: n = 1
For i = 2022 To 2022 '設置要獲取的年份區間
For j = 1 To 12 ' 按 1 -12 月進行循環
If j < 10 Then '給小於10的月份前補數字0(網址需要)
t = 0
Else
t = ""
End If
str = i & t & j
If i = Year(Date) And j > Month(Date) Then Exit For ' 如果時間大於本月則推出循環,主要是爲了不循環今年的後幾個月
With ActiveSheet.QueryTables.Add("url;http://www.tianqihoubao.com/lishi/beijing/month/" & str & ".html", Range("a" & n)) '天氣後報的網址,如果要爬某個城市的天氣請把“beijing”改成對應的城市拼音即可
.WebFormatting = xlWebFormattingNone ' 不包含格式
.WebSelectionType = xlSpecifiedTables '指定table模式
.WebTables = "1" '第1張table
.Refresh False
End With
n = Cells(Rows.Count, 1).End(3).Row + 1
Next
Next
Columns("A:D").Select
ActiveSheet.Range("$A:$D").RemoveDuplicates Columns:=Array(1, 2, 3, 4), Header:=xlNo '刪除重複項
Range("C:C,D:D").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove '插入空行
Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分列
Columns("D:D").TextToColumns Destination:=Range("D1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分類
Columns("F:F").TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True '分類
ColumnCells.Replace " ", "", 2 '去掉空格
Cells.Replace "℃", "", 2 '去掉℃
Range("B1:G1") = Array("白天天氣", "夜晚天氣", "最高氣溫", "最低氣溫", "白天風", "夜晚風")
Columns.AutoFit
Range("A1").Select
str1 = Time - t1
MsgBox Format(CDate(str1), "hh:mm:ss")
End Sub
運行效果圖如下:
vba 獲取天氣數據
好,用 Excel 獲取數據的方法就介紹到這裏,希望對你有幫助。
零售店鋪的現代管理方式:經驗 + 數據追蹤,所以每個零售管理者都應該配備一個數據工具,用 Excel 做的就行,戳圖片給你看一個利器↓↓↓
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Y80iIaPdvE9ew_OlMXKbug