用 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