我的博文地址

https://www.cnblogs.com/lingdurebing/p/11618902.html

使用的库

1.commons-codec

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

2.requests-5.0.7

大佬写的java 类似python的requests库

github地址:https://github.com/zhangjingpu/requests

和python的requests用法差不多。

3.fastjson

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

4.实现

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

这里主要贴java代码

先引入需要的依赖。

		<dependency>
<groupId>net.dongliu</groupId>
<artifactId>requests</artifactId>
<version>5.0.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>

然后是主要的实现类

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<String,Object> header;
private Map<String,Object> params;
public Fanyi()
{
params=new HashMap<String,Object>();
header=new HashMap<String,Object>();
}
private Map<String,Object> 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<String,Object> header)
{
this.header=header;
}
public Map<String,Object> 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, 没有问题,完成。

参考博文连接地址:https://blog.csdn.net/suixinlun/article/details/93976400

java实现有道翻译爬虫的更多相关文章

  1. Selenium+PhantomJS实现简易有道翻译爬虫

    Selenium一款自动化测试工具,当然用来写爬虫也是没有问题的.它支持Chrome.Safari.Firefox等主流界面式浏览器,另外它也支持多种语言开发,比如 Java,C,Ruby,Pytho ...

  2. python学习笔记(6)--有道翻译爬虫

    说明: 1. 导入三个模块,urllib.request.urlopen用来打开url链接,urllib.parse的urlencode方法将浏览器network里的data对象转为urlopen的第 ...

  3. Python 有道翻译 爬虫 有道翻译API 突破有道翻译反爬虫机制

    py2.7 #coding: utf-8 import time import random import hashlib import requests while(1): url = 'http: ...

  4. 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

    1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...

  5. Java接口测试之使用有道翻译API

    写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...

  6. python3爬虫:利用urllib与有道翻译获得翻译结果

    在实现这一功能时遇到了一些困难,由于按照<零基础入门python>中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: http://ai ...

  7. 爬虫实战2_有道翻译sign破解

    目标url 有道翻译 打开网站输入要翻译的内容,一一查找network发现数据返回json格式,红框就是我们的翻译结果 查看headers,发现返回结果的请求是post请求,且携带一大堆form_da ...

  8. (未完成...)Python3网络爬虫(2):利用urllib.urlopen向有道翻译发送数据并获得翻译结果

    环境: 火狐浏览器 pycharm2017.3.3 python3.5 1.url不仅可以是一个字符串,例如:http://www.baidu.com.url也可以是一个Request对象,这就需要我 ...

  9. python爬虫-有道翻译-js加密破解

    有道翻译-js加密破解 这是本地爬取的网址:http://fanyi.youdao.com/ 一.分析请求 我们在页面中输入:水果,翻译后的英文就是:fruit.请求携带的参数有很多,先将参数数据保存 ...

随机推荐

  1. 2019DX#5

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 fraction 辗转相除 4.17%(7/168) ok  1002 three arr ...

  2. I-string_2019牛客暑期多校训练营(第四场)

    题意 当a != b且a != rev(b)则认为a串与b串不相等,rev(b)表示b串的反串,例如rev(abcd) = dcba 给出一个串求出该串所有不相等的子串个数 题解 先利用后缀数组求出s ...

  3. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  4. python数据结构——线性表

    线性表 线性表可以看作是一种线性结构(可以分为顺序线性结构,离散线性结构) 1. 线性表的种类: 顺序表 元素存储在一大块连续存储的地址中,首元素存入存储区的起始位置,其余元素顺序存放. (元素之间的 ...

  5. 蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制

    作者:404,公众号404P,转载请注明出处. 前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离 ...

  6. 希尔排序的正确性 (Correctness of ShellSort)

    学希尔排序的时候,觉得有序性保持的性质十分神奇,但哪里都找不到数学证明.最后在Donald E. Knuth的The Art of Computer Programming中找到了(显然我没有读过这套 ...

  7. 使用Nginx、Nginx Plus防止服务器DDoS攻击

    分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞.资源耗尽从而不能为正常用户提供正常服务的攻击手段.随着互联网带宽的增加和相关工具的不断发布,这种 ...

  8. ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡

    博客园第一篇博客,CSDN现在让人眼花缭乱了 @_@ 由于需要wifi调试,笔记本内置的网卡有点不太灵光,买了个TPLINK的WDN5200H AC网卡,给虚拟机用,折腾一下成功了github上有rt ...

  9. Android集成JPush极光推送

    推送原理 参考网址:https://blog.csdn.net/huangli1466384630/article/details/79889473 SDK下载 https://docs.jiguan ...

  10. postman--请求以及变量设置的实例练习

    我们可以在2个地方添加需要执行的js脚本,一个是Pre-request Script,还有一个tests,我们先看请求之前的 1 在请求被发送到服务器之前:就是在“Pre-request Script ...