excelvba抓取网页数据(百度中搜索关键字:网络爬虫写入当前Excel工作表 )

优采云 发布时间: 2021-09-24 06:08

  excelvba抓取网页数据(百度中搜索关键字:网络爬虫写入当前Excel工作表

)

  在百度中搜索关键词“网络爬虫”,将查询结果前5页的数据写入当前Excel工作表中。示例代码如下。

  Sub WebQueryBaiduPN()

Dim strURL As String

Dim objXMLHTTP As Object

Dim objDOM As Object

Dim objTitle As Object

Dim intPageNum As Integer

Dim k As Integer

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

Set objDOM = CreateObject("htmlfile")

Cells.ClearContents

Range("a1:c1") = Array("序号", "标题", "链接")

k = 1

For intPageNum = 0 To 50 Step 10

strURL = "https://www.baidu.com/s?"

strURL = strURL & "wd=网络爬虫"

strURL = strURL & "&pn=" & intPageNum

With objXMLHTTP

.Open "GET", strURL, False

.setRequestHeader "If-Modified-Since", "0"

.send

objDOM.body.innerHTML = .responseText

End With

For Each objTitle In objDOM.getElementsByTagName("h3")

k = k + 1

Cells(k, 1) = k - 1

With objTitle.getElementsByTagName("a")(0)

Cells(k, 2) = .innerText

Cells(k, 3) = .href

End With

Next objTitle

Next intPageNum

Set objXMLHTTP = Nothing

Set objDOM = Nothing

Set objTitle = Nothing

End Sub

  第16行代码指定获取百度查询结果的页数。通过手动翻百度网页页面,观察Fiddler软件请求框中【WebForms】界面参数的变化,可以发现参数pn代表查询结果的页码。该参数每增加10,网页每增加10更新一次。

  代码第17-22行使用MSXML2.XMLHTTP对象发送请求数据,并将获取到的响应信息写入HTML DOM对象的Body标签中。

  第 19 行代码指定了请求头域 If-Modified-Since。由于XSXML2.XMLHTTP对象会优先从Excel或IE缓存中读取数据,因此在刷新互联网浏览器数据但未删除缓存时,无法获取网页的最新数据。

  If-Modified-Since 是标准的 HTTP 请求标头。发送HTTP请求时,会将浏览器缓存页面的最后修改时间发送给服务器,服务器会将此时间与实际文件的最后修改时间进行比较。

  如果时间相同,服务器返回HTTP状态码304而不是文件内容。客户端收到信息后,将本地缓存文件加载到浏览器中。此时,MSXML2.XMLHTTP 对象实际上读取了本地缓存的数据。

  相反,如果时间不一致,服务器返回 HTTP 状态码 200 和新文件内容。客户端收到信息后,丢弃旧文件,缓存新文件,加载到浏览器中。此时,MSXML2.XMLHTTP 对象读取服务器发送的新数据。

  第23-30行遍历HTML DOM对象的h3标签,是百度网页的三级标题。

  第26行至第29行代码分别获取标签下标签为a的第一个子节点的文本内容和链接URL。

  运行过程的部分结果如下。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线