You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何提取JavaScript代码?谷歌翻译动态内容爬取求助

爬取谷歌翻译动态生成内容的解决方案

方案一:用无头浏览器渲染JS(适合页面爬取场景)

Jsoup只能解析静态HTML,要获取JS动态生成的内容,得用能模拟浏览器渲染JavaScript的工具,比如Selenium。它会完整加载页面并执行所有JS代码,之后就能像正常浏览器一样定位、提取目标元素。

步骤和Java代码示例:

  • 先引入Selenium依赖(Maven配置):
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.15.0</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>4.15.0</version>
</dependency>
  • 编写爬取逻辑:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;

public class GoogleTranslateScraper {
    public static void main(String[] args) {
        // 配置Chrome无头模式,无需打开可视化浏览器窗口
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless=new");
        options.addArguments("--disable-gpu");
        
        WebDriver driver = new ChromeDriver(options);
        try {
            // 打开谷歌翻译主页
            driver.get("https://translate.google.com");
            
            // 输入要翻译的文本(示例为中文"你好")
            driver.findElement(By.cssSelector("textarea[aria-label='源文本']")).sendKeys("你好");
            
            // 等待目标元素加载完成,最多等待10秒
            WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
            var targetDiv = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.xUPQqb")));
            
            // 提取翻译文本和元素完整HTML结构
            String translatedText = targetDiv.getText();
            String elementHtml = targetDiv.getAttribute("outerHTML");
            
            System.out.println("翻译结果:" + translatedText);
            System.out.println("目标元素HTML:" + elementHtml);
        } finally {
            // 关闭浏览器实例
            driver.quit();
        }
    }
}

方案二:直接调用谷歌翻译API(更稳定合规)

爬取网页容易因为谷歌更新页面布局、触发反爬机制而失效,直接使用官方API是更靠谱的选择,不过需要申请API密钥并按调用量付费。

Java代码示例(用OkHttp发送请求):

  • 先引入OkHttp和JSON解析依赖:
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>
  • API调用逻辑:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.IOException;

public class GoogleTranslateAPI {
    private static final String API_KEY = "替换成你的谷歌云API密钥";
    private static final String API_BASE_URL = "https://translation.googleapis.com/language/translate/v2";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        
        String sourceText = "你好";
        String sourceLang = "zh";
        String targetLang = "en";
        
        // 构造请求URL
        String requestUrl = String.format("%s?q=%s&source=%s&target=%s&key=%s",
                API_BASE_URL, sourceText, sourceLang, targetLang, API_KEY);
        
        Request request = new Request.Builder().url(requestUrl).build();
        
        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("请求失败: " + response.code());
            
            // 解析JSON响应获取翻译结果
            JSONObject responseJson = new JSONObject(response.body().string());
            JSONArray translations = responseJson.getJSONObject("data").getJSONArray("translations");
            String translatedText = translations.getJSONObject(0).getString("translatedText");
            
            System.out.println("翻译结果:" + translatedText);
        }
    }
}

注意事项

  • 页面爬取方式:谷歌有反爬机制,频繁请求可能被封禁IP,建议添加请求延时,必要时使用代理IP
  • API方式:需要在谷歌云平台申请API密钥并启用翻译服务,按实际调用量收费,但稳定性和合规性远高于页面爬取
  • 页面元素的class(比如xUPQqb)可能会被谷歌随时修改,若用页面爬取,需要定期检查调整元素选择器

内容的提问来源于stack exchange,提问作者Roony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:17:18