你讓你的 Excel 學口譯了么?

最近 Apple ID 被盜,上傳了資料在等官解

這天無聊開著 Excel 在那亂點…

Web 函數…這是什麼鬼 (,,? ? ?,,)?

趕緊地看下函數說明

ENCODEURL(text):返回 URL 編碼的字元串。

WEBSERVICE(url):返回 Web 服務中的數據。

FILTERXML(xml,n xpath):使用指定的 XPath 從 XML 內容返回特定數據。

厲害了我的哥!(o ° ω ° O)

當即我就腦補出了用 Excel 網抓的流程:

=FILTERXML(WEBSERVICE(ENCODEURL(urlText)),XPathText)n

簡直完美!(╭ ̄ 3  ̄)╭?

……

Wait!

……

好像哪裡不太對!?

……

X…M…L…?

如果你能找到在線XML文檔…

正常網站都是用 HTML 的吧!!OTL

然後

  • 對於不支持的協議,例如 ftp://file://,WEBSERVICE 返回錯誤值 #VALUE!

  • 如果 url 字元串所含字元超過 GET 請求允許的 2048 個字元,則 WEBSERVICE 返回錯誤值 #VALUE!

  • 如果參數導致字元串無效或含有的字元超過允許的單元格限制(32767 個字元),則 WEBSERVICE 返回錯誤值 #VALUE!

—— Microsoft Office 幫助

???【黑人問號臉.gif】我默默地看了下自己知乎主頁的源碼…

(っ °Д °;)っ︵┻━┻

這年頭網上已經沒有只用 GET 請求字元總數在 32767 個字元一下的 XML 文檔了吧!!!

不信我搜給你看!

……

你別說,還真有! (⊙ . <#(@=

……

dict.youdao.com/search?

不知道哪位大神分享的有道詞典的XML版

……

簡直完美!(╭ ̄ 3  ̄)╭?

既然搞到了有道老師的 XML 文檔,為什麼不調教調教 Excel 學口譯呢?!

如果你會一丟丟 XPath

初級口譯:問一個答一個

不會?…就只能速成了!

XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集

那啥叫節點呢?看圖說話

看到一個個書名號沒有?看到紅框框沒有?剩下的請去 W3School自學!

音標 //phonetic-symbol 和翻譯 //translation/content 的 XPath 套一下剛才YY的公式:

=FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&[InputText]&"&doctype=xml"),XPathText[音標])n

再試試中文?

厲害了我的哥!(o ° ω ° O)

不過貌似解決不了一詞多義?

如果你會一丟丟數組

中級口譯:問一個答一溜

研究一下中譯英的 XML 文件…發現打不開…

沒關係,還記得那個沒被想起來的 EncodeURL 么…轉化好以後是這樣的…

dict.youdao.com/search?

果然有5個翻譯,卻只顯示了一個…

想到 XPath 取得是節點集,那麼…用數組形式再轉置一下

多義是解決了,不過其他問題慘不忍睹啊…特別有道詞典貌似沒收錄我的哥…無解了吧

不信我搜給你看!

……

你別說,還真有! (⊙ . <#(@=

……

fanyi.youdao.com/transl

不知道哪位大神分享的有道翻譯的XML版…

……

簡直完美!(╭ ̄ 3  ̄)╭?

如果你碰巧找到了另一份在線XML文檔

高級口譯:問啥答啥

不過有道翻譯沒音標,所以能用詞典還是要用詞典的

  • 第一個 IFERROR 處理有道詞典沒收錄的換有道翻譯

  • 第二個 IFERROR 處理 #N/A

  • 條件格式處理重複值

厲害了我的哥!(o ° ω ° O)

音標n=IFERROR(FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&$B3&"&doctype=xml"),XPathText_D[音標]),"--")nn翻譯 數組形式 Ctrl + Shift + Entern=IFERROR(IFERROR(TRANSPOSE(FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&B3&"&doctype=xml"),XPathText_D[詞典])),TRANSPOSE(FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?i="&B3&"&doctype=xml"),XPathText_D[翻譯]))),"")n

本來到這裡應該結束了,但是今天是個特殊的日子!

如果你會一丟丟VBA

我已經把所有的全忘記了!

寫個自定義函數<刪除>裝逼</刪除>

Option ExplicitnnFunction UDF_Translate(strText As String) As Stringn Version1.0 by 餅乾n Dim urlDict As String, urlTranslate As String, xmlText As Stringn Dim PhoneticSymbol As String, TranslateArrn n 整理urln urlDict = "http://dict.youdao.com/search?q=" & strText & "&doctype=xml"n urlTranslate = "http://fanyi.youdao.com/translate?i=" & strText & "&doctype=xml"n n 使用 WebService 和 FilterXML 獲取網路數據n On Error GoTo Error01n xmlText = Application.WorksheetFunction.WebService(urlDict)n Debug.Print xmlText 調試用n PhoneticSymbol = Application.WorksheetFunction.FilterXML(xmlText, "//phonetic-symbol")n TranslateArr = Application.WorksheetFunction.FilterXML(xmlText, "//translation/content[1]")n n 整理數據n If IsArray(TranslateArr) Thenn UDF_Translate = "[" & PhoneticSymbol & "] " & Join(Application.WorksheetFunction.Transpose(TranslateArr), ";")n Elsen UDF_Translate = "[" & PhoneticSymbol & "] " & TranslateArrn End Ifn Debug.Print Translate 調試用nExit FunctionnError01: 若有道詞典報錯n On Error GoTo Error02n xmlText = Application.WorksheetFunction.WebService(urlTranslate)n Debug.Print xmlText 調試用n UDF_Translate = Application.WorksheetFunction.FilterXML(xmlText, "//translation")n Debug.Print Translate 調試用nExit FunctionnError02: 若有道翻譯報錯n UDF_Translate = Err.DescriptionnEnd Functionn

效果圖:

1024快樂!

Fin

推薦閱讀:

zhihu-oauth 能否快速判斷兩個用戶(非登錄用戶)之間的關注關係?
如何使用c++語言進行數據抓取?
前嗅的這款數據採集軟體和像八爪魚這類的軟體有什麼區別,優勢在哪?
新浪微博數據抓取方法有哪些?
App中的數據可以用網路爬蟲抓取么?

TAG:数据抓取 | 自定义函数 | VBA |