教程共两册,八十四讲。今日的内容是专题六“VBA中利用XMLHTTP完成网抓数据”的第2讲:VBA网抓之关键词抓取
在上一讲中我们讲解了一些常用的概念,以及XMLHTTP在应用时常用的一些属性和方法,从这一讲开始,我们开始逐渐学习利用XMLHTTP的这些属性和方法来抓取网络的数据。
我们这讲要实现的目的:在一个EXCEL页面中有若干个关键词,我们要利用搜索引擎在网络中进行搜索,然后把搜索到的结果进行反馈。如下图:
对于返回的结果是XMLHTTP的responseText属性,在上一讲的讲解中我们讲过XMLHTTP的responseText属性结果返回为字符串。
我们要在这个字符串中提取出我们要结果。我们可以先看看在一个实际的网页中查询的结果的responseText字符串:
关于上述字符串的解释我将在下个专题给大家讲解。
最后我们将利用数组函数在上面的字符串中分解出查询的结果。利用的数组函数是Split。
Sub myNZ() 'VBA抓取百度查询关键词结果的个数
【代码略,见程序源码文件】
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), "<")(0) 这句代码是利用Split(Split(strJG, "百度为您找到相关结果")(1), "<")(0) 来返回搜索返回的条目数,这段代码可以仔细理解一下,如果不是很清楚Split的作用大家可以参考我的第三套教程《VBA数组与字典解决方案》
8)Set objXMLHTTP = Nothing 清空内存
代码截图:
从上面的结果中,我的各套教程是非常受欢迎的,哈哈。
本讲参考程序文件:006工作表.XLSM
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序: