《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,二十个专题。今日分享内容是VBA信息获取与处理专题六第三节 利用XMLHTTP抓取汉英在线翻译的结果

【分享成果,随喜正能量】日子是活给自己看的,不是来源于别人的指指点点;日子是活给时光看的,别让时光的压力把咱压得喘不过气来。这社会上总有一些人,尽管自己过的磕磕碰碰,却每天热衷于他家的长短。
专题六第三节 利用XMLHTTP抓取汉英在线翻译的结果在利用VBA进行网抓数据的时候,利用XMLHTTP方法确实是一种非常方便的方案,按照我对VBA的理解“VBA是实现个人小型办公自动化的有效手段”,在网络数据和EXCEL表格相结合的时候,更能体现出VBA的实用主义。这种寄生的语言正是一个桥梁,让网络的数据可以近距离的来到我们使用的现场。
今日这节我给大家讲解利用XMLHTTP方法实现关键词的即时翻译,并给出结果在单元格中。这讲的内容也是我们在工作中可以用到的,当我们需要翻译一些词语,就可以利用这些方法。关键是这种方案的好处可以把翻译的结果直接实现在EXCEL工作表中,避免了大量的复制粘贴的过程,可以提高我们的工作效率。下面看我们这节的内容。
实现场景:在工作表中有一组关键词我们要实现网络的翻译,并把结果放到对应的单元格中。如下图,要求是当我们点击运行按钮时,即刻可以实现翻译。

网络上可以实现翻译网站有很多,这一讲我们采用“http://fanyi.youdao.com/translate” 。
为了分析方便,我们先在提示的网址内录入数据,看看翻译的结果。如下截图:

在上一节中我们利用的是GET提交数据,这一讲我们提交数据的时候采用POST方法. 实际上POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)时,数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。这一点不同于GET方法,GET只是请求指定的页面信息,并返回实体主体。
在请求头部的时候,我们利用:
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
其中Content-Type:用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 网页点击的结果却是下载一个文件或一张图片的原因。Content-Type 标头告诉客户端实际返回的内容的内容类型。
application/x-www-form-urlencoded :
最后在返回的responseText中进行数据的提取即可。
2 应用XMLHTTP实现抓取汉英翻译结果的代码实现过程为了实现上述的思路,我给出了下面的代码:
Sub myNZB() '利用VBA提取抓取汉英在线翻译的结果
Dim objXMLHTTP As Object
Sheets("SHEET2").Select
Range("B2:B" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
strURL = "http://fanyi.youdao.com/translate"
With objXMLHTTP
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'post 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
'POST 请求可能会导致新的资源的建立和/或已有资源的修改。不同于GET.get是请求指定的页面信息,并返回实体主体。
.Open "POST", strURL, False
'请求头部
'Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,
'这就是经常看到一些 网页点击的结果却是下载一个文件或一张图片的原因。Content-Type 标头告诉客户端实际返回的内容的内容类型。
'application/x-www-form-urlencoded :
'form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "i=" & Cells(i, 1) & "&from=AUTO&to=AUTO&doctype=json"
strText = .responseText
Cells(11, 2) = strText
Cells(i, 2) = Split(Split(strText, "tgt"":""")(1), """}")(0)
Next i
End With
Set objXMLHTTP = Nothing
MsgBox "OK!"
End Sub
代码的截图:

由于在代码中我给出了大部分的注释,这里就不再进行代码的讲解了,大家要反复的看这几个专题的讲解,才能熟悉相关的知识点。
3 应用XMLHTTP实现抓取汉英翻译结果的实现结果我们点击运行按钮,查看一下翻译的结果:

总体来说还是可以接受的。大家要注意的是这些翻译的结果来自网络.
另外,在代码中我给出的设置是“from=AUTO&to=AUTO&doctype=json" 下面我给出了一句英语看看可否能比较准确的翻译呢:如下图:

同样也得到了比较正确的结果。
本节知识点回向:GET提交数据和POST提交数据有何不同?如何设置浏览器读取数据?如何利用XMLHTTP反馈网页中的翻译数据?
本讲参考程序文件:006工作表.XLSM
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

