1.首先用了urllib包中的request模塊。
在這個模塊中
response1 = urllib.request.Request(url, data,header)
response = urllib.request.urlopen(response1)
這兩步的結(jié)合就等于urllib.request.urlopen(url,data),但是有點遺憾的是urlopen中不能傳入header部分。所以當(dāng)需要結(jié)合header時,我們需要用兩步來完成。
獲取來的response,我們可以通過response.read()來獲取到反映內(nèi)容。具體操作見下文:以有道翻譯為例,進行了嘗試。需要注意的是,用這個包來訪問的話我們對編碼有要求的話需要引入另一個模塊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("請輸入內(nèi)容:")
if mes =='q':
break
? ? ? ? t=translate(mes)
# t.my_ip()
? ? ? ? re=t.result
print(re)
time.sleep(5)



2. 本來是跟著視頻學(xué)習(xí),結(jié)果有道翻譯的源代碼改進了,原本的學(xué)習(xí)代碼在訪問時會報errorcode 50原來是對參數(shù)進行了加密,去查看其中的js文件就可以發(fā)現(xiàn)加密內(nèi)容。

3.將本來很簡單的代碼修改了了一下,根據(jù)js中的加密邏輯對內(nèi)容進行更改就可以了(完成版就是第一部分中展示的源代碼)。