Step1
打開有道翻譯 通過審查元素,找到下圖內(nèi)容
image.png
Step2 上代碼
import urllib.request
import urllib.parse
import json
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data = {}
data['i'] = 'i love you'
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = [dict]
data['client'] = 'fanyideskweb'
data['salt'] = '1536832138651'
data['sign'] = 'd01d0881f67f7d556a6c6d2bb441478e'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
respones = urllib.request.urlopen(url,data)
html = respones.read().decode('utf-8')
target = json.loads(html)
target = target['translateResult'][0][0]['tgt']
print(target)
Step3 優(yōu)化代碼 并且修改headers 模擬正常瀏覽器
1.在Request對象生成之前 添加headers字典
import urllib.request
import urllib.parse
import json
content = input('請輸入待查詢的內(nèi)容:')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = [dict]
data['client'] = 'fanyideskweb'
data['salt'] = '1536832138651'
data['sign'] = 'd01d0881f67f7d556a6c6d2bb441478e'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
headers = {}
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
req = urllib.request.Request(url,data,headers)
respones = urllib.request.urlopen(req)
html = respones.read().decode('utf-8')
target = json.loads(html)
target = target['translateResult'][0][0]['tgt']
print(target)
2.或者動態(tài)追加headers
import urllib.request
import urllib.parse
import json
content = input('請輸入待查詢的內(nèi)容:')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = [dict]
data['client'] = 'fanyideskweb'
data['salt'] = '1536832138651'
data['sign'] = 'd01d0881f67f7d556a6c6d2bb441478e'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
respones = urllib.request.urlopen(req)
html = respones.read().decode('utf-8')
target = json.loads(html)
target = target['translateResult'][0][0]['tgt']
print(target)
當(dāng)然以上代碼還只是個雛形,因?yàn)槟泐l繁的用同一個ID訪問,服務(wù)器還是可能會把你頻閉掉,兩個解決辦法
one
通過time 模塊延遲訪問 減少訪問頻率
import urllib.request
import urllib.parse
import json
import time
while 1:
content = input('請輸入待查詢的內(nèi)容(輸入"q!"退出程序):')
if content == 'q!':
break
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = [dict]
data['client'] = 'fanyideskweb'
data['salt'] = '1536832138651'
data['sign'] = 'd01d0881f67f7d556a6c6d2bb441478e'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
respones = urllib.request.urlopen(req)
html = respones.read().decode('utf-8')
target = json.loads(html)
target = target['translateResult'][0][0]['tgt']
print(target)
time.sleep(4)
two
代理
a.參數(shù)是一個字典{‘類型’ :'代理ip:端口號'}
proxy_support = urllib.request.ProxyHandler({})
b.定制創(chuàng)建一個opener
opener = urllib.request.build_opener(proxy_support)
c.安裝opener
urllib.request.install_opener(opener)
如果只是臨時用下那個opener 可以不用安裝,直接調(diào)用就行了 opener.open(url)
當(dāng)然這里還可以通過opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')]來私人定制標(biāo)頭 讓服務(wù)器覺得是瀏覽器在訪問
還有這里需要解釋一下opener,其實(shí)之前大家看到的urlopen()函數(shù)就已經(jīng)接觸到opener了 不信看urlopen()源代碼
image.png