我的博文地址

使用的库

1.commons-codec

主要是为了加密,可以直接用java原生的,这里偷懒了,有点大才小用的感觉。

2.requests-5.0.7

大佬写的java 类似python的requests库

和python的requests用法差不多。

3.fastjson

主要为了解析json字符串,没有要求。

4.实现

实现在上面博文里说的很详细,有道翻译的加密基本没改,唯一修改的就是字符串D: n%A-rKaT5fb[Gy?;N5@Tj

这里主要贴java代码

先引入需要的依赖。

net.dongliu

requests

5.0.7

commons-codec

commons-codec

1.13

com.alibaba

fastjson

1.2.47

然后是主要的实现类

import java.io.IOException;

package com.yang.easySpider;

import java.io.IOException;

import java.io.InputStream;

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

import org.apache.commons.codec.digest.DigestUtils;

import net.dongliu.requests.Requests;

public class Fanyi {

private String msg;

private String url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule";

private String D="n%A-rKaT5fb[Gy?;N5@Tj";

private String bv;

private String salt;

private String sign;

private String ts;

private Map header;

private Map params;

public Fanyi()

{

params=new HashMap();

header=new HashMap();

}

private Map getParams(String msg)

{

params.put("i", setMsg(msg));//设置msg同时更新ts,salt,sign;

params.put("from","AUTO");

params.put("to","AUTO");

params.put("smartresult","dict");

params.put("client","fanyideskweb");

params.put("sign",this.sign);

params.put("bv",this.bv);

params.put("ts",this.ts);

params.put("salt",this.salt);

params.put("doctype","json");

params.put("version", "2.1");

params.put("keyfrom", "fanyi.web");

params.put("action", "FY_BY_REALTlME");

return params;

}

public String getResult(String msg)

{

return Requests.post(url).headers(getHeaders()).body(getParams(msg)).send().readToText();

//得到json格式的文本

}

public void setHeaders(Map header)

{

this.header=header;

}

public Map getHeaders()

{

if(this.header.get("Referer")==null)

{

this.header.put("Referer", "http://fanyi.youdao.com/");

}

return this.header;

}

public void setUserAgent(String UA)

{

this.header.put("User-Agent", UA);

//设置UserAgent

String cookie=Requests.get("http://fanyi.youdao.com").headers(this.header).send().getHeader("Set-Cookie").split(";")[0]+";";

//得到Cookie

//设置Cookie

this.header.put("Cookie", cookie);

this.bv=getBv(UA);//设置UA的同时要更新bv,因为bv是通过加密UA得到的。

}

private String getSalt()

{

this.salt=String.valueOf(this.ts)+String.valueOf(((int)Math.random()*10));

return this.salt;

}

private String getSign()

{

return getMd5("fanyideskweb"+this.msg+this.salt+this.D);

}

private String getTs()

{

return String.valueOf(System.currentTimeMillis());

}

private String getBv(String UserAgent)

{

return getMd5(UserAgent);

}

private String getMd5(String val)

{

return DigestUtils.md5Hex(val);

}

public String setMsg(String msg)

{

this.msg=msg;

//设置需要翻译的内容

this.ts=getTs();//更新ts

this.salt=getSalt();//更新salt

//设置翻译内容的同时更新ts,salt

this.sign=getSign();

//有了翻译内容,salt才能得到sign,网易主要靠此判断

return this.msg;

}

}

测试一下

public static void main( String[] args )

{

Fanyi fanyi=new Fanyi();

fanyi.setUserAgent("Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36");

String st=fanyi.getResult("hello");

System.out.print(st);

JSONObject json=JSONObject.parseObject(st);

JSONArray ja=(JSONArray) ((JSONArray) json.get("translateResult")).get(0);

JSONObject js=(JSONObject) ja.get(0);

System.out.print(js.get("tgt"));

}

Ok, 没有问题,完成。

java有道_java实现有道翻译爬虫相关推荐

  1. 十以内的加减java编写程序_Java实现随机出题,10道10以内加减法计算代码实例

    本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.Toolkit; imp ...

  2. java小学生加减法_Java实现随机出题,10道10以内加减法计算代码实例|chu

    本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.Toolkit; imp ...

  3. java随机出题_Java实现随机出题,10道10以内加减法计算代码实例

    Java实现随机出题,10道10以内加减法计算代码实例 发布于 2020-3-10| 复制链接 摘记: 本文实例为大家分享了Java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体 ...

  4. java 百分比相加_2019年Java面试题基础系列228道(5),快看看哪些你还不会?

    2019年Java面试题基础系列228道 Java面试题(一) 第一篇更新1~20题的答案解析 第二篇更新21~50题答案解析 第三篇更新51~95题答案解析 Java面试题(二) 第四篇更新1~20 ...

  5. Java中创建String的两道面试题及详解

    转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...

  6. python利用mysql数据库实现一个中英文翻译程序兼单词试卷生成并改阅功能,并可以爬取有道官网进行在线翻译。

    直接上运行截图(代码在后面) 开始界面 使用navicat查看mysql数据库中的数据 单词查询功能测试 本地翻译一个本地数据库中有的单词 本地翻译一个本地数据库中没有的单词 爬取有道官网进行在线翻译 ...

  7. Java SE 基础部分经典100道笔试题

    这100道题的范围主要是Java SE部分,正在学习Java SE的同学可以做一下,巩固一下学习的知识,也比较适合准备面试的同学复习使用.本题有90道选择题和10道填空题,选择题大部分是单选题,少数为 ...

  8. 有道翻译 爬虫,分析反爬 附代码

    有道翻译 爬虫,破解反爬加密 0引言 1准备工作 开始第一部分 开始第二部分 准备工作,下载并安装requests模块 确定反爬用的变量 确定变量的值 requests模块的使用 0引言 我在这里会很 ...

  9. java编程10以内随机数字乘除,Java实现随机出题,10道10以内加减法计算代码实例...

    本文实例为大家分享了java实现随机出题,10道10以内加减法计算l的具体代码,供大家参考,具体内容如下 package com.swift; import java.awt.toolkit; imp ...

最新文章

  1. Python培训教程分享:Python模块如何导入__all__属性?
  2. html靶心制作,用PS单色填充制作一个靶心
  3. 2012 AndroidWorld Global Developers Conference
  4. nyoj1047欧几里得
  5. 云计算和其三种服务模式:IaaS,PaaS和SaaS
  6. 浙企加入中国大数据产业生态联盟 共商数据价值
  7. 【FFMPEG源码终极解析】 av_packet_alloc 与 av_packet_free
  8. 天籁obd接口针脚定义_关于手机MicroUSB接口数据线,这里有最详细解说
  9. mysql join 条件_MySQL Join 竟然可以这么玩?根据条件 进行复制
  10. PyTorch并行与分布式(四)Distributed Data Papallel
  11. 如何在Mac上的“终端”中创建自定义功能键?
  12. (转帖出自ESRI BBS)有关于GIS思想
  13. 2019年技术盘点容器篇(三):阿里专家谈容器:既叫好又叫座? | 程序员硬核评测
  14. matlab分析地形,基于Matlab的地形数据处理
  15. 霜降|JEPaaS提醒您注意防寒保暖
  16. linux系统镜像后缀及简单介绍
  17. 润雅信息完成B轮融资 大数据平台赋能汽车销售 1
  18. 牛客每日练习----あなたの蛙が帰っています,おみやげをまらいました,写真がとどいています
  19. 微信QQ等主流应用上线国产系统UOS:界面曝光
  20. BODIPY493/503-alkyne/amine/azide/carboxylic acid/DBCO/hydrazide/maleimide/NHS /tetrazine氟化硼二吡咯衍生物

热门文章

  1. 四、软件概要设计说明书-模板
  2. 张量网络系列(一 从张量到张量网络)
  3. JAVA_获取正常上班工作日-除去节假日_双休日_加上加班
  4. git删除所有文件夹(清空远程仓库)
  5. 335x系列平台-usb的模式切换HOST和OTG
  6. MySQL 8.0 执行 insert 插入数据非常缓慢的问题及解决方法
  7. 编程之美 - 创作后记(部分)
  8. 电气器件系列二十一:变压器
  9. java安卓自动关机_android自动关机代码
  10. HTML5+CSS3小实例:炫彩的聚光灯文字效果