1.发现在翻译时地址没有变,那是POST请求。

2.通过fidder抓包工具抓取url

3.对data分析,发现每次salt和sign都在变化。

4.查看源码,先用站长工具http://tool.chinaz.com/Tools/jsformat.aspx格式化,用sublines打开搜索到关键字salt和sign对其分析

5.代码如下,还有bug

# -*- coding:utf-8 -*-

import urllib
import urllib2
import time
from lxml import etree
import random
import hashlib # 通过抓包的方式获取的url,并不是浏览器上显示的url
url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom="
# 完整的headers
headers = {
"Accept" : "application/json, text/javascript, */*; q=0.01",
"X-Requested-With" : "XMLHttpRequest",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
} # 用户接口输入
key = raw_input("请输入需要翻译的文字:") # 发送到web服务器的表单数据
u = 'fanyideskweb'
d = key
f = str(int(time.time()*1000) + random.randint(1,10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4' formdata = {
"from":"AUTO",
"to":"AUTO",
"i" : key,
"smartresult":"dict",
"client":"fanyideskweb",
"salt":f,
"sign":hashlib.md5((u + d + f + c).encode('utf-8')).hexdigest()
,
"doctype":"json",
"version":"2.1",
"keyfrom":"fanyi.web",
"action":"FY_BY_CLICKBUTTION",
"typoResult":"true"
} # 经过urlencode转码
data = urllib.urlencode(formdata) # 如果Request()方法里的data参数有值,那么这个请求就是POST
# 如果没有,就是Get
request = urllib2.Request(url, data = data, headers = headers) content = urllib2.urlopen(request).read()
# 把字符串转为html格式,xpath只能解析html格式
html = etree.HTML(content)
answer = html.xpath("//div/p/....")
print answer

5.解决了一部分bug,因为返回来的数据是json数据不能有xpath解析

# -*- coding:utf-8 -*-

import urllib
import urllib2
import time
from lxml import etree
import random
import hashlib
import json #. 通过抓包的方式获取的url,并不是浏览器上显示的url
url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
# 完整的headers
headers = {
"Accept" : "application/json, text/javascript, */*; q=0.01",
"X-Requested-With" : "XMLHttpRequest",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36",
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8",
} # 用户接口输入
key = raw_input("请输入需要翻译的文字:") # 发送到web服务器的表单数据
u = 'fanyideskweb'
d = key
f = str(int(time.time()*1000) + random.randint(1,10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4'
g = key.decode("utf-8")
formdata = {
"from":"AUTO",
"to":"AUTO",
"i" : key,
"smartresult":"josn",
"client":"fanyideskweb",
"salt":f,
"sign":hashlib.md5((u + g + f + c).encode("utf-8")).hexdigest()
,
"doctype":"json",
"version":"2.1",
"keyfrom":"fanyi.web",
"action":"FY_BY_CLICKBUTTION",
"typoResult":"true"
} # 经过urlencode转码
data = urllib.urlencode(formdata) # 如果Request()方法里的data参数有值,那么这个请求就是POST
# 如果没有,就是Get
request = urllib2.Request(url, data = data, headers = headers)
# 返回的是json文件
content = urllib2.urlopen(request).read().decode("utf-8")
print content
# 只能有json解析
target = json.loads(content)
print(target["translateResult"][0][0]["tgt"]) """
print content
# 把字符串转为html格式,xpath只能解析html格式
html = etree.HTML(content)
answer = html.xpath("//div/div")[0].text
answer = answer.decode("utf-8").encode("gbk")
print answer
"""

bug不能翻译中文。。

POST/有道翻译 有bug的更多相关文章

  1. 添加了有道生词本的 chrome google翻译扩展和有道翻译扩展

    在chrome发布项目,需要先花美金认证,还得要美国ID,无奈. 直接上源码,需手动导入. 原始项目源码并未开源,个人是从chrome本地文件里拿出来的,拓展来的,侵删(本来想着自已写一个,业余时间, ...

  2. 桌面每日一句--桌面翻译工具(有道翻译,微软翻译,Google翻译)

    现在的翻译软件功能越来越多,也越来越臃肿,还不时弹广告,真的很烦恼. 鉴于这种情况,自己做了个翻译软件,能满足日常需求就好了.需要用的时候可以直接在桌面输入单词翻译,或者直接使用快捷键呼出翻译窗口.最 ...

  3. Python 实现有道翻译命令行版

    一.个人需求 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性 ...

  4. 使用python在SAE上搭建一个微信应用,使用有道翻译的api进行在线翻译

    1. 准备,先在使用python一步一步搭建微信公众平台(一)中基本实现自动回复的功能后,接着在有道词典上申请一个key,http://fanyi.youdao.com/openapi?path=da ...

  5. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  6. 记微信开发(有道翻译api)

    记微信开发(有道翻译api) 记微信开发(有道翻译api) 效果: 有道翻译api申请: 地址:http://fanyi.youdao.com/openapi code: <?php/** * ...

  7. 有道翻译API

    轻奢侈品_百度百科 轻奢侈品 有道翻译API 有道翻译API申请成功 API key:72763558 keyfrom:lexus-studio

  8. Requests抓取有道翻译结果

    Requests比urllib更加方便,抓取有道翻译非常的简单. import requests class YouDao():     def __init__(self,parm):        ...

  9. Python3 词汇助手 有道翻译助手 有道导出文件格式转换

    根据有道翻译软件的功能,结合实际用途,基于Python3.6写了一个有道翻译助手软件. 测试文件及源代码已上传至:https://github.com/MMMMMichael/Translation- ...

随机推荐

  1. Espresso浅析和使用

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ Espresso是一个Google官方提供的Android应用UI自动化测试框架.Google希望,当Android的开发者利用Espress ...

  2. .Net 多线程开发优化实践

    互联网产品中微服务.高并发已经成为最基本的要求.所谓高并发就是在同一时刻处理多个服务请求.为了提高高并发场景下的系统稳定性,负载均衡.消息队列等框架和技术应运而生,有效的缓解了高并发对系统整体压力.无 ...

  3. struts2的简单执行过程

    struts2是最近刚学的一个框架,想通过写篇文章来加深下印象,这也是本篇博文产生的由来,下面进入正题 Struts2本身是一个挺简单的框架,我们通过写一个登陆的过程来具体描述下其执行过程 1.首先我 ...

  4. java并发之同步辅助类(Semphore、CountDownLatch、CyclicBarrier、Phaser)

    线程同步辅助类,主要学习两点: 1.上述几种同步辅助类的作用以及常用的方法 2.适用场景,如果有适当的场景可以用到,那无疑是最好的 semaphore(seməˌfôr) 含义 信号量就是可以声明多把 ...

  5. java多线程系列(九)---ArrayBlockingQueue源码分析

    java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...

  6. Vuex非常适合新手的教程,保教不会!

    本讲解基于Vue-cli(脚手架)搭建的项目. Vuex 数据状态管理工具,整个流程类似依赖注入,相当于预先定义,倒推.(个人理解) 1. 安装vuex  命令行输入 npm install vuex ...

  7. Nuxt框架实践

    前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...

  8. 天梯赛 L2-020. 功夫传人 BFS

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  9. PHP面向对象-----魔术方法

    PHP面向对象-----魔术方法 __get($name)--触发时机:当调用一个不访问的成员属性的时候,会自动触发,可以利用这个方法来完成对不可调用的属性进行调用,但是不能设置值 ___set($n ...

  10. 数据库索引------Btree索引的使用限制

    1.如果不是按照索引最左列开始查找,则无法使用索引. 比如说id+name   那么是name+id 的话  ,这个索引则无法使用. 2.使用索引时不能跳过索引中的列.   如果是id+name+ag ...