1.首先用了urllib包中的request模块。
在这个模块中
response1 = urllib.request.Request(url, data,header)
response = urllib.request.urlopen(response1)
这两步的结合就等于urllib.request.urlopen(url,data),但是有点遗憾的是urlopen中不能传入header部分。所以当需要结合header时,我们需要用两步来完成。
获取来的response,我们可以通过response.read()来获取到反映内容。具体操作见下文:以有道翻译为例,进行了尝试。需要注意的是,用这个包来访问的话我们对编码有要求的话需要引入另一个模块urllib.parse。具体操作见下面:
源代码:
import urllib.request
import hashlib
import time
import json
import random
import urllib.parse
class translate(object):
def __init__(self,mes):
self.mes=mes
self.salt=self.get_salt()
self.sign=self.get_sign(self.salt)
self.result=self.get_result(self.mes,self.salt,self.sign)
def get_sign(self,salt):
value="fanyideskweb"+self.mes+salt+"p09@Bn{h02_BIEe]$P^nG"
sign=hashlib.md5(value.encode('utf-8'))
sign=sign.hexdigest()
return sign
def get_salt(self):
tm =int(time.time() *1000)
rm = random.randint(0, 10)
st =str(tm + rm)
return st
def get_result(self,mes,salt,sign):
data={
'i':mes,
'from':'AUTO',
'smartresult':'dict',
'client':'fanyideskweb',
'salt':salt,
'sign':sign,
'ts':"1548211604248",
'bv':"363eb5a1de8cfbadd0cd78bd6bd43bee",
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':"FY_BY_CLICKBUTTION",
'typoResult':"true"
}
data=urllib.parse.urlencode(data).encode('utf-8')
header={
"Cookie":"OUTFOX_SEARCH_USER_ID=-164022675@36.110.13.42;",
"Referer":"http://fanyi.youdao.com/?keyfrom=dict2.top",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
url="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
try:
response1 = urllib.request.Request(url, data,header)
response = urllib.request.urlopen(response1)
html=response.read().decode('utf-8')
html=json.loads(html)
if 'translateResult' in html:
rs = html['translateResult'][0][0]['tgt']
return rs
else:
pass
except:
return "this is a wrong."
if __name__=='__main__':
while True:
mes=input("请输入内容:")
if mes =='q':
break
t=translate(mes)
# t.my_ip()
re=t.result
print(re)
time.sleep(5)
2. 本来是跟着视频学习,结果有道翻译的源代码改进了,原本的学习代码在访问时会报errorcode 50原来是对参数进行了加密,去查看其中的js文件就可以发现加密内容。
3.将本来很简单的代码修改了了一下,根据js中的加密逻辑对内容进行更改就可以了(完成版就是第一部分中展示的源代码)。