分享

Excel vba 网抓百度搜索结果

 心灵地图sxh 2019-01-27

最近在录制Excel vba网抓教程,弄了一个网抓百度搜索结果的例子,分享一下。(注意:网抓是有时效性的,如果下面代码无法生效,请评论回复提醒我一下,谢谢。)

百度搜索的url参数,主要有三个:

1、wd,必填,搜索关键字

2、rn,可选,每页显示的搜索结果数量,范围1-50

3、pn,可选,当前页码,从0开始计数,需要用页码乘以rn


例如,搜索“杨仕航的博客”,每页显示20条记录,查看第2页。请求的链接如下:

https://www.baidu.com/s?wd=杨仕航的博客&rn=20&pn=20


写了两个过程,分别是获取搜索结果数量和结果列表

  1. '获取搜索结果数量(在立即窗体输出结果,你可以改成Function返回结果)'
  2. '参数说明:'
  3. '   strWord:关键字'
  4. '使用示例:GetSearchNum "杨仕航的博客"'
  5. Public Sub GetSearchNum(strWord As String)
  6.     '创建XMLHttp对象'
  7.     With CreateObject("MSXML2.XMLHTTP")
  8.         '构建并发送请求'
  9.         .Open "GET", "https://www.baidu.com/s?wd=" & strWord & "&rn=1", False
  10.         .send
  11.         
  12.         '等待响应'
  13.         Do While .readyState <> 4
  14.             DoEvents
  15.         Loop
  16.         
  17.         '处理响应结果'
  18.         Dim strNum As String
  19.         strNum = Split(Split(.ResponseText, "百度为您找到相关结果")(1), "<")(0)
  20.     End With
  21.     
  22.     Debug.Print "关键字:" & strWord & vbCrLf & "百度为您找到相关结果" & strNum
  23. End Sub
  1. '获取百度搜索列表(结果输出到当前表格的A列和B列)'
  2. '参数说明:'
  3. '   strWord:关键字'
  4. '   lngNum:每页条数,1-50'
  5. '   lngPage:第几页的数据,从0开始计数'
  6. '使用示例:GetSearchList "杨仕航的博客"'
  7. Public Sub GetSearchList(strWord As String, Optional lngNum As Long = 10, Optional lngPage As Long = 0)
  8.     Dim s() As String, arr(), i As Long
  9.     [a:b].ClearContents '清除数据'
  10.  
  11.     '创建XMLHttp对象'
  12.     With CreateObject("MSXML2.XMLHTTP")
  13.         '构建并发送请求'
  14.         .Open "GET", "https://www.baidu.com/s?wd=" & strWord & "&rn=" & lngNum & "&pn=" & lngNum * lngPage, False
  15.         .send
  16.         
  17.         '等待响应'
  18.         Do While .readyState <> 4
  19.             DoEvents
  20.         Loop
  21.  
  22.         '处理响应结果 每个搜索结果a标签前面都有h3标签,以此为分组依据'
  23.         s = Split(.ResponseText, "<h3 class=""t")
  24.         ReDim arr(UBound(s), 1)
  25.         
  26.         arr(0, 0) = "标题"
  27.         arr(0, 1) = "链接"
  28.         
  29.         For i = 1 To UBound(s)
  30.             '这个是比较长,主要是获取对应的标题。其中包含去掉em标签等内容'
  31.             arr(i, 0) = Trim(Split(Replace(Replace(Replace(Split(Split(s(i), "")(0), "target=""_blank""")(1), "", ""), "", ""), Chr(10), ""), ">")(1))
  32.             '获取对应的链接'
  33.             arr(i, 1) = Split(Split(s(i), "<a href=""")(1), """")(0)
  34.         Next
  35.     End With
  36.     [A1:B1].Resize(UBound(arr) + 1) = arr
  37. End Sub

最后面那些split和replace是处理响应的数据,获取对应的结果。分析过程太长了,写出来会很长篇幅。想了解详细分析过程,可以看我的网抓教程里面具体讲解。(教程可能还没上线,大概2016年3月份会上线)


2016-2-5 修改http为https,http模式百度已经把wd参数改成word,导致无法使用。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多