Excel vba 网抓百度搜索结果

  • 发布时间:2016年1月30日 16:40
  • 作者:杨仕航

最近在录制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


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

'获取搜索结果数量(在立即窗体输出结果,你可以改成Function返回结果)'
'参数说明:'
'   strWord:关键字'
'使用示例:GetSearchNum "杨仕航的博客"'
Public Sub GetSearchNum(strWord As String)
    '创建XMLHttp对象'
    With CreateObject("MSXML2.XMLHTTP")
        '构建并发送请求'
        .Open "GET", "https://www.baidu.com/s?wd=" & strWord & "&rn=1", False
        .send
        
        '等待响应'
        Do While .readyState <> 4
            DoEvents
        Loop
        
        '处理响应结果'
        Dim strNum As String
        strNum = Split(Split(.ResponseText, "百度为您找到相关结果")(1), "<")(0)
    End With
    
    Debug.Print "关键字:" & strWord & vbCrLf & "百度为您找到相关结果" & strNum
End Sub
'获取百度搜索列表(结果输出到当前表格的A列和B列)'
'参数说明:'
'   strWord:关键字'
'   lngNum:每页条数,1-50'
'   lngPage:第几页的数据,从0开始计数'
'使用示例:GetSearchList "杨仕航的博客"'
Public Sub GetSearchList(strWord As String, Optional lngNum As Long = 10, Optional lngPage As Long = 0)
    Dim s() As String, arr(), i As Long
    [a:b].ClearContents '清除数据'

    '创建XMLHttp对象'
    With CreateObject("MSXML2.XMLHTTP")
        '构建并发送请求'
        .Open "GET", "https://www.baidu.com/s?wd=" & strWord & "&rn=" & lngNum & "&pn=" & lngNum * lngPage, False
        .send
        
        '等待响应'
        Do While .readyState <> 4
            DoEvents
        Loop

        '处理响应结果 每个搜索结果a标签前面都有h3标签,以此为分组依据'
        s = Split(.ResponseText, "<h3 class=""t")
        ReDim arr(UBound(s), 1)
        
        arr(0, 0) = "标题"
        arr(0, 1) = "链接"
        
        For i = 1 To UBound(s)
            '这个是比较长,主要是获取对应的标题。其中包含去掉em标签等内容'
            arr(i, 0) = Trim(Split(Replace(Replace(Replace(Split(Split(s(i), "")(0), "target=""_blank""")(1), "", ""), "", ""), Chr(10), ""), ">")(1))
            '获取对应的链接'
            arr(i, 1) = Split(Split(s(i), "<a href=""")(1), """")(0)
        Next
    End With
    [A1:B1].Resize(UBound(arr) + 1) = arr
End Sub

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


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

上一篇:Python字符串处理方法总结

下一篇:Linux用xrandr设置双屏显示

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空