首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 調用百度翻譯 API 實現英文轉中文:完整代碼實戰與反爬蟲應對

     編輯:ASP.NET 基礎

準備工作

  1. 註冊百度開發者帳號,創建應用獲取 API Key (client_id)
  2. 參考文檔:https://api.fanyi.baidu.com/api/trans/product/desktop
  3. 安裝 NuGet 包:System.Web.Extensions (JavaScriptSerializer) 或 Newtonsoft.Json

核心調用邏輯


using System;
using System.Net;
using System.Web.Script.Serialization;
using System.Text.RegularExpressions;

public class BaiduTranslator {
    private readonly string _apiKey;
    private readonly JavaScriptSerializer _jss = new JavaScriptSerializer();
    
    public BaiduTranslator(string apiKey) { _apiKey = apiKey; }
    
    public string Translate(string text, string from = "auto", string to = "auto") {
        string url = $"https://api.fanyi.baidu.com/api/trans/vip/translate?q={WebUtility.UrlEncode(text)}&from={from}&to={to}&appid={_apiKey}&salt={DateTime.Now.Ticks}&sign={GenerateSign(text)}";
        // 註:正式版需簽名 sign=MD5(appid+q+salt+密鑰),此處簡化演示
        
        using (WebClient wc = new WebClient()) {
            string json = wc.DownloadString(url);
            var result = _jss.Deserialize(json);
            return result?.trans_result?.FirstOrDefault()?.dst ?? text;
        }
    }
    
    // 批量翻譯(含延遲防封禁)
    public string TranslateBatch(string[] texts, int delayMs = 1000) {
        var results = new List();
        foreach (var t in texts) {
            results.Add(Translate(t));
            System.Threading.Thread.Sleep(delayMs);
        }
        return string.Join("。", results);
    }
    
    private string GenerateSign(string q) { /* MD5 實現 */ return ""; }
}

public class BaiduResult {
    public List trans_result { get; set; }
}
public class TransResult { public string src { get; set; } public string dst { get; set; } }

實戰場景:採集國外內容並翻譯入庫


public partial class Collector : System.Web.UI.Page {
    protected void Page_Load(object sender, EventArgs e) {
        var translator = new BaiduTranslator("YOUR_API_KEY");
        var db = new Entities();
        
        for (int i = 740; i < 900000; i++) {
            try {
                string url = $"https://www.52mvc.com/story/love/{i}.html";
                string html = DownloadHtml(url);
                
                // 提取標題
                string title = Regex.Match(html, @"(.+?)").Groups[1].Value;
                // 提取正文
                string content = Regex.Match(html, @"雙擊或拖選\)(.+?) ").Groups[1].Value;
                content = StripHtml(content).Replace(" ", "").Replace(""", "“");
                
                // 翻譯標題
                string zhTitle = translator.Translate(title);
                
                // 分句翻譯正文
                var sentences = content.Split('.').Where(s => s.Length > 0).ToArray();
                string zhContent = translator.TranslateBatch(sentences);
                
                // 入庫
                db.Contents.Add(new Content { Title = zhTitle, Body = zhContent });
                db.SaveChanges();
                
                Thread.Sleep(100); // 禮貌延遲
            } catch (Exception ex) {
                LogError(i, ex);
                Thread.Sleep(1500); // 錯誤後較長延遲
            }
        }
    }
    
    private string DownloadHtml(string url) { /* WebClient 下載 */ return ""; }
    private string StripHtml(string html) => Regex.Replace(html, "<[^>]*>", "");
}

關鍵技術點解析

技術點實現細節
URL 編碼WebUtility.UrlEncode 處理中文/特殊字符
JSON 反序列化JavaScriptSerializer 或 JsonConvert 映射 DTO
HTML 清洗Regex 移除標籤,處理實體字符
分句翻譯按標點分割,避免單次請求過長被拒
防封禁策略請求間隔 Sleep、異常重試、User-Agent 模擬
簽名生成MD5(appid + q + salt + 密鑰) —— 正式版必須

Unicode 處理輔助方法


// 中文轉 Unicode (\uXXXX)
public string ToUnicode(string str) {
    if (string.IsNullOrEmpty(str)) return "";
    var sb = new StringBuilder();
    foreach (char c in str) sb.Append("\\u" + ((int)c).ToString("x4"));
    return sb.ToString();
}

// Unicode 轉中文
public string FromUnicode(string str) {
    if (string.IsNullOrEmpty(str)) return "";
    return Regex.Replace(str, @"\\u([0-9A-Fa-f]{4})", m => ((char)int.Parse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber)).ToString());
}

避坑指南與最佳實踐

  • API 配額: 免費版有字符/日限制,大量翻譯需購買付費版
  • 並發控制: 單線程串行 + 延遲,避免觸發風控
  • 錯誤重試: 指數退避重試(1s, 2s, 4s...),記錄失敗 ID 斷點續傳
  • 質量評估: 機翻質量有限,關鍵內容需人工複核
  • 替代方案: Google Translate API、Azure Translator、有道智雲等

結語

百度翻譯 API 提供了低成本的機器翻譯能力,配合 ASP.NET 後台採集、清洗、入庫流程,可快速構建多語言內容庫。核心在於請求頻率控制、異常重試、數據清洗三大工程化保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved