如何从新的Google翻译网站引用和检索翻译结果? (使用VBA)

时间:2018-12-03 22:05:10

标签: html excel vba web-scraping google-translate

当前,这是我在IE对象中加载网站(从生成的URL仍能正确显示google翻译)之后(成功地)从google translation获得结果的代码(我没有触摸过2天,并在Google更新其Google翻译网站的第二天进行了尝试):

Function GetTransItem(IE As Object) As String

Dim strInnerHTML As String
Dim ArraySplitHTML
Dim iArrayItem As Long
Dim strTranslated As String

strInnerHTML = IE.Document.getElementById("result_box").innerHTML

'some other code here to fix hmtl character encodings, clean up HTML, etc. etc.

GetTransItem = strTranslated

End Function

现在,从上周四(11/29)开始,当Google更新了Google翻译网站时,此行给出了一个错误:

strInnerHTML = IE.Document.getElementById("result_box").innerHTML

HTML现在已经完全不同了,我还不了解我需要“获取”什么,而不是“ result_box”才能在网站上找到翻译的文本。

如果有人可以帮助我找出哪些代码行将返回带有转换结果的字符串,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

您仍然可以使用浏览器来检索翻译信息。这只是为了演示如何抓住右侧的翻译表。

Option Explicit

Public Sub GetInfo()
    Dim IE As New InternetExplorer, t As Date, clipboard As Object, ws As Worksheet
    Const MAX_WAIT_SEC As Long = 5

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With IE
        .Visible = True
        .navigate "https://translate.google.com/#view=home&op=translate&sl=auto&tl=en"

        While .Busy Or .readyState < 4: DoEvents: Wend

        .document.querySelector("#source").Value = "Bonjour"

        Dim hTable As HTMLTable
        t = Timer
        Do
            On Error Resume Next
            Set hTable = .document.querySelector(".gt-baf-table")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While hTable Is Nothing
        If Not hTable Is Nothing Then
            clipboard.SetText hTable.outerHTML
            clipboard.PutInClipboard
            ws.Cells(1, 1).PasteSpecial
        End If
        .Quit
    End With
End Sub

与您一起检查本地版本HTML右侧翻译表的类名:

enter image description here


从结果框中:

Option Explicit
Public Sub GetInfo()
    Dim IE As New InternetExplorer, t As Date, ws As Worksheet
    Const MAX_WAIT_SEC As Long = 5

    Set ws = ThisWorkbook.Worksheets("Sheet1")

    With IE
        .Visible = True
        .navigate "https://translate.google.com/#view=home&op=translate&sl=auto&tl=en"

        While .Busy Or .readyState < 4: DoEvents: Wend

        .document.querySelector("#source").Value = "je vous remercie"

        Dim translation As Object, translationText As String
        t = Timer
        Do
            On Error Resume Next
            Set translation = .document.querySelector(".tlid-translation.translation")
            translationText = translation.textContent
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While translationText = vbNullString

        ws.Cells(1, 1) = translationText
       .Quit
    End With
End Sub

答案 1 :(得分:1)

它看起来像是paid service now

  

“翻译API

     

Google还提供了更强大的付费产品。 Translate API可用于驱动Web应用程序以及翻译网站内容。”。

  

Simple integration

     

Translation API是易于使用的Google REST API。您不必从文档中提取文本,只需发送HTML文档并获取翻译后的文本即可。”。

翻译:

  • Google语音:“您不必从文档中提取文字...”。

  • 英语:“您不再不再能够从文档中提取文本了……”。

Google's Translation FAQ

  

“有免费配额吗?
  不可以,Cloud Translation API仅可作为付费服务使用。有关更多详细信息,请参见Pricing。”

为了避免绕过付费服务,从URL返回的结果现在变得更加scrape更加困难。免费翻译仍然适用于人类。