爬有道翻译的几种方法
生活随笔
收集整理的這篇文章主要介紹了
爬有道翻译的几种方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
方法一:
剛開始用selenium來爬
public static String changeArticle(String srcTxt) {WebDriver driver = SeleniumUtil.getNoHeadDriver();driver.get("http://fanyi.youdao.com/");try {driver.findElement(By.id("inputOriginal")).sendKeys(srcTxt);String result = driver.findElement(By.id("transTarget")).getAttribute("innerHTML");while (result == null || "".equals(result)) {Thread.sleep(100);result = driver.findElement(By.id("transTarget")).getAttribute("innerHTML");}result = HtmlUtil.changeP(result);result=StringUtil.kill(result, "<", ">");SeleniumUtil.click(driver, driver.findElement(By.id("inputDelete")));driver.findElement(By.id("inputOriginal")).sendKeys(result);Thread.sleep(100);result = driver.findElement(By.id("transTarget")).getAttribute("innerHTML");while (result == null || "".equals(result)) {Thread.sleep(100);result = driver.findElement(By.id("transTarget")).getAttribute("innerHTML");}result = HtmlUtil.changeP(result);result=StringUtil.kill(result, "<", ">");return result;} catch (InterruptedException e) {e.printStackTrace();} finally {driver.close();driver.quit();}return "";}效率太低,放棄了
方法二:
看了網上的,注釋掉salt、sign
fanyi.youdao.com/translate_o改成了fanyi.youdao.com/translate
英文轉中文沒問題,中文轉英文,返回的就是亂碼,我一度以為是我的post方法導致的,折騰了一整夜,放棄了
public static String translate_en2zh(Map<String, String> params,String i,String from,String to) throws Exception {//這個只能英文轉中文Map<String,String> forms=new HashMap<String,String>();forms.put("i", i);forms.put("from",from);//en zh-CHS viforms.put("to", to);forms.put("smartresult", "dict");forms.put("client", "fanyideskweb"); // forms.put("salt", "16374128938108"); // forms.put("sign", "40869be25369a6f5a33a689596a4ffea");forms.put("lts", "1637412893810");forms.put("bv", "b0ff5d17f404993192085bf8b1e93587");forms.put("doctype", "json");forms.put("version", "2.1");forms.put("keyfrom", "fanyi.web");forms.put("action", "FY_BY_REALTlME");String post = SpiderUtil.post("https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule", params, forms);return post;}方法三:
破解sign的奧秘
網上有現成的方法,但是給我返回了{"errorCode":50}
后來發現是sign的密鑰不同。自己寫了個getCode()方法,讓它自動獲取,總算沒問題了。
我后來想將越南語轉成英文,返回了{"errorCode":40}。再看了一下網站,發現都是中文轉其他,或者其他轉中文,沒有其他轉其他的操作。應該是網站不支持這種轉換,不了了之。
public static String translate(Map<String, String> params,String i,String from,String to) throws Exception {params.clear();params.put("Cookie","OUTFOX_SEARCH_USER_ID=1799185238@10.169.0.83;");params.put("Referer","http://fanyi.youdao.com/");params.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");Map<String,String> forms=new HashMap<String,String>();String bv= DigestUtils.md5Hex("Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36");String ts=String.valueOf(System.currentTimeMillis());String slat = String.valueOf(ts + (long) (Math.random() * 10 + 1));String sign = DigestUtils.md5Hex("fanyideskweb" + i + slat + getCode());forms.put("i", i);forms.put("from",from);//en zh-CHS viforms.put("to", to);forms.put("smartresult", "dict");forms.put("client", "fanyideskweb");forms.put("salt", slat);forms.put("sign", sign);forms.put("lts", ts);forms.put("bv", bv);forms.put("doctype", "json");forms.put("version", "2.1");forms.put("keyfrom", "fanyi.web");forms.put("action", "FY_BY_REALTlME");forms.put("typoResult", "true");String post = SpiderUtil.post("http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule", params, forms);return post;}private static String getCode() throws IOException{String downhref="";String page=SpiderUtil.getPageContent("http://fanyi.youdao.com/");for(String s:Hp.find(page, "script[attr=src]")){if(s.endsWith("fanyi.min.js")){downhref=s;break;}}String tem2="c:/temspace/tem"+System.currentTimeMillis()+".txt";SpiderUtil.download(downhref, tem2);String file = FileUtil.getFile(tem2);FileUtil.del(tem2);String feature = SearchUtil.getListWithFeature(file, Arrays.asList("sign:n.md5(\"","\")")).get(0);feature=feature.replace("sign:n.md5(\"fanyideskweb\"+e+i+\"", "").replace("\")", "");return feature;}總結
以上是生活随笔為你收集整理的爬有道翻译的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 只要工具到位,java也可以很简单
- 下一篇: Java加视频特效,实现伪原创