无聊学爬虫(二):有道翻译发送post请求

客户端给服务器发送数据的请求方式有两种:post和get

思路借鉴:大佬

区别:get请求的参数会在夹杂url中(类比明信片) post请求的参数则会保存在from data中(类比写信)

而有道翻译就是很经典的post请求案列。
我在抓包工具上获得了boby信息:
i said
from AUTO
to AUTO
smartresult dict
client fanyideskweb
salt 15860279984523
sign 8794e6e13fb52862ef4239f376db451c
ts 1586027998452
bv 04578d470e7a887288dc80a9420e88ec
doctype json
version 2.1
keyfrom fanyi.web
action FY_BY_CLICKBUTTION

更换翻译词:name
i name
from AUTO
to AUTO
smartresult dict
client fanyideskweb
salt 15860282119225
sign cea422f26cc5e4ef485addabb044fc92
ts 1586028211922
bv 04578d470e7a887288dc80a9420e88ec
doctype json
version 2.1
keyfrom fanyi.web
action FY_BY_CLICKBUTTION

经过多次实验:发现只有i salt sign 会随着翻译词的变化而变化,但是除了" i "以外,其他两个参数并不知道,经过查询相关大佬的文章,借鉴代码实现了中英互译的效果。

import urllib.request
import urllib.parse
import time
import random
import hashlib
import re
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
data = {}
i=input("请输入要翻译的词:")
#i = 'I lov you baby'
data['i']=i
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_REALTIME'
data['typoResult']='false'
u = 'fanyideskweb'
f = str(int(time.time()*1000)+random.randint(1,10))
c = "ebSeFb%=XZ%T[KZ)c(sy!"
sign = hashlib.md5((u+i+f+c).encode('utf-8')).hexdigest()
data['salt']=f
data['sign']=sign
data= urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
key=html[35:43]
a="ZH_CN2EN"
if  key==a:
    pattern=re.compile('"src":"(.*)",')
    translate=pattern.findall(html)
    result=translate[0]
    print("翻译结果为:"+str(result))
else:
    pattern=re.compile('"tgt":"(.*)"')
    translate=pattern.findall(html)
    result=translate[0]
    print("翻译结果为:"+str(result))

我对 xianwan029 的代码进行了一点小小改进,让我们的输出结果更加人性化,接下来展示下试验结果。
实验结果

感谢:xianwan029 的源代码提供思路让我成功爬取了页面,

如果您有任何问题,请联系。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值