大家好,我們今日講解"利用XMLHTTP抓取百度查詢關鍵詞結果的個數",這節內容是"VBA信息獲取與處理"教程中第六個專題"VBA中利用XMLHTTP完成網抓數據"的第二節。
第二節 利用XMLHTTP抓取百度查詢關鍵詞結果的個數
在上一講中我們講解了一些常用的概念,以及XMLHTTP在應用時常用的一些屬性和方法,從這一講開始,我們開始逐漸學習利用XMLHTTP的這些屬性和方法來抓取網絡的數據。
我們這講要實現的目的:在一個EXCEL頁面中有若干個關鍵詞,我們要利用搜索引擎在網絡中進行搜索,然后把搜索到的結果進行反饋。如下圖:

1 應用XMLHTTP實現反饋搜索結果的思路分析
為了實現上述的目的,我們要首先建立一個引用,引用一下XMLHTTP;然后利用XMLHTTP的方法實現相應關鍵字的查詢,所以利用+關鍵字的搜索。這里將利用XMLHTTP的open方法。
對于返回的結果是XMLHTTP的responseText屬性,在上一講的講解中我們講過XMLHTTP的responseText屬性結果返回為字符串。
我們要在這個字符串中提取出我們要結果。我們可以先看看在一個實際的網頁中查詢的結果的responseText字符串:

關于上述字符串的解釋我將在下個專題給大家講解。
最后我們將利用數組函數在上面的字符串中分解出查詢的結果。利用的數組函數是Split。
2 應用XMLHTTP實現反饋搜索結果的代碼實現
下面我們看看VBA代碼是如何實現上述思路的:
Sub myNZ() 'VBA抓取百度查詢關鍵詞結果的個數
Dim objXMLHTTP As Object
Sheets("SHEET1").Select
i = 2
Do While Cells(i, 1) <> ""
UU = Cells(i, 1).Value
'XmlHttp是可以在腳本語言中通過http協議傳送或從接收XML及其他數據的一套API。
'XmlHttp最大的用處是可以更新網頁的部分內容而不需要刷新整個頁面。
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With objXMLHTTP
strURL = "https://www.baidu.com/s?wd=" & UU
'創建一個新的http請求,并指定此請求的方法、URL以及驗證信息(用戶名/密碼)
.Open "GET", strURL, False
'發送請求到http服務器并接收回應
.send
'responseText 屬性是將響應信息作為字符串返回.只讀
strJG = .responseText
End With
Cells(i, 2) = "百度 " & UU & " 結果個數為:"
Cells(i, 3) = Split(Split(strJG, "百度為您找到相關結果")(1), "
Set objXMLHTTP = Nothing
i = i + 1
Loop
MsgBox "OK!"
End Sub
上述代碼實現我們的思路,這也是一段非常實用的代碼,希望大家能利用。
代碼的講解:
1)UU = Cells(i, 1).Value 是對搜索關鍵字的提取
2)Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") 建立一個對象,并將這個對象賦值為建立起來的XMLHTTP對象。
3)strURL = "https://www.baidu.com/s?wd=" & UU 建立一個字符串,用于我們發送http請求的地址。
4).Open "GET", strURL, False '創建一個新的http請求,并指定此請求的方法、URL以及驗證信息(用戶名/密碼) 在這句代碼中利用的GET方法,還有一種方法是POST,這兩種方法有什么區別呢?這個問題我們會在后續的講解中提到。
5).send 是發送請求到http服務器并接收回應
6) strJG = .responseText 用字符串接受返回結果.responseText。
7) Cells(i, 3) = Split(Split(strJG, "百度為您找到相關結果")(1), "
8)Set objXMLHTTP = Nothing 清空內存
代碼截圖:

3 應用XMLHTTP實現反饋搜索結果
通過上面的代碼過程,我們看看反饋的結果:

從上面的結果中,我的各套教程是非常受歡迎的,哈哈。
本節知識點回向:如何利用XMLHTTP的屬性和方法反饋網頁中的關鍵詞的搜索結果呢?
本講參考程序文件:006工作表.XLSM

VBA是利用Office實現自己小型辦公自動化的有效手段,這是我對VBA的應用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,也需要經歷一種枯燥的感覺,如太白詩云:眾鳥高飛盡,孤云獨去閑。相看兩不厭,只有敬亭山。
"水善利萬物而不爭",綿綿密密,微則無聲,巨則洶涌。學習亦如此,知道什么是自己所需要的,不要蜷縮在一小塊自認為天堂的世界里,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。愿力決定始終,智慧決定成敗。不管遇到什么,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在后疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶涌。
我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重復我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程。
第一套:VBA代碼解決方案 是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;
第二套:VBA數據庫解決方案 數據庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。
第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。
第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。
第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。
第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及范圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。如需要可以可以WeChat: NZ9668
學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心里沒有那么多邪知邪見,也就沒有那么多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,大家可以根據以上資料1,3,2,6,5或者是4,3,2,6,5的順序逐漸深入的逐漸學習。

每一分收獲都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最后將一闕詞送給致力于VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:
浮云掠過,暗語無聲,
唯有清風,驚了夢中啼鶯。
望星,疏移北斗,
奈將往事雁同行。
阡陌人,昏燈明暗,
忍顧長亭。
多少VBA人,
暗夜中,悄聲尋夢,盼卻天明。
怎無憑!
分享成果,隨喜正能量