有道在线翻译:http://fanyi.youdao.com/
如果直接爬取,返回的信息几乎为0!
第一步:浏览器上打开我们的开发者工具(F12)
第二步:点到network
第三步:在翻译处输入 内容
接下来我们发现这才是我们提交的网址
继续往下看
这是我们提交的数据
所以真实的url=“http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule”
那我们现在就立马开始
from urllib import request, parse
import time, hashlib,json,random
#有道是需要动态加密 下一遍博客说加密方式
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
#破解有道翻译加密需要
salt=int(time.time() * 10000) #时间戳 取上小数点后面的4位
ts = int(time.time() * 1000) #时间戳 取上小数点后面的4位
word = input("请输入要翻译的内容:")
#sign是有道翻译的加密公式 然后再进行md5加密
sign = "fanyideskweb" + word + str(salt) + "p09@Bn{h02_BIEe]$P^nG"
md5 = hashlib.md5()
md5.update(bytes(sign, encoding="utf-8"))
sign = md5.hexdigest()
#伪装请求头
headers = {
'Cookie': '[email protected]|1545122805|0|other|00&99|gud&1545113426&mail163#gud&440100#10#0#0|&0|mail163&unireg|[email protected]; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; [email protected]; JSESSIONID=abcaN_71sYsdlbrJGzkFw; OUTFOX_SEARCH_USER_ID_NCOO=1290461564.900615; ___rl__test__cookies='+str(ts),
#这里要注意最后是一个动态时间戳
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Pragma': 'no-cache',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
#这是我们提交的数据
data = {
'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': str(salt),
'sign': sign,
'ts': str(ts),
'bv': 'b8bcedb6e9d30eb0beaae6f2c4cb90f1',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTIME',
'typoResult': 'false',
}
#把提交的数据转码
data_str = parse.urlencode(data)
#封装好url 、headers、data_tr
req = request.Request(url=url, headers=headers, data=bytes(data_str,encoding="utf-8"))
#获取翻译返回的内容是一个json格式
content_text = request.urlopen(req).read().decode("utf-8")
#json转码
fanyi_dict=json.loads(content_text)
#提取内容
word_dict=fanyi_dict["translateResult"][0][0]
print("单词:",word_dict["src"],"(",word_dict["tgt"],")")
for i in fanyi_dict["smartResult"]["entries"][1:]:
print(i,end="")
加密内容下次详细说!主要我们掌握找异步加载url