python爬有道翻譯

 

在有道翻譯頁面中打開開發者工具,在Headers板塊找到Request URL以及相應的data。html

 

import urllib.request import urllib.parse import json content=input('請輸入須要翻譯的內容:') #_o要去掉,不然會出先error_code:50的報錯 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' data={} #開發者工具裏有,i和doctype鍵不可少 data['i']=content data['from']='AUTO' data['to']='AUTO' data['smartresult']='dict' data['client']='fanyideskweb' data['salt']='15695569180611' data['sign']='5b0565493d812bc5e713b895c12d615d' data['doctype']='json' data['version']='2.1' data['keyfrom']='fanyi.web' data['action']='FY_BY_REALTTIME' #將字典類型的請求數據轉化爲url編碼,並將編碼類型轉變爲'utf-8'類型 data=urllib.parse.urlencode(data).encode('utf-8') #向url請求data的響應結果 response=urllib.request.urlopen(url,data) #讀取返回數據內容,decode是轉換返回數據的格式爲str html=response.read().decode('utf-8') #使用json將字符串轉化成字典 target=json.loads(html) #結果在key='translateResult'的三層列表的key='tgt'中 print("翻譯結果:%s" %(target['translateResult'][0][0]['tgt']))

 

  

上面這種很大可能被有道網頁給識別出來不是人工在訪問,而是代碼在訪問。web

此時咱們能夠加個‘User-Agent’代理。經過設置User Agent來達到隱藏身份的目的,通常狀況下瀏覽器是經過User-Agent來識別的。json

 

經過調用urllib.request.Request()來設置UA。瀏覽器

 

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None) This class is an abstraction of a URL request.

  url should be a string containing a valid URL. ide

  headers should be a dictionary #headers要爲字典工具

 

有兩種方法設置User Agent:編碼

    1.在建立Request對象的時候,填入headers參數(包含User Agent信息),這個Headers參數要求爲字典;url

    2.在建立Request對象的時候不添加headers參數,在建立完成以後,使用add_header()的方法,添加headers。

spa

import urllib.request import urllib.parse import json import time while True: content=input('請輸入須要翻譯的內容(輸入"q!退出程序"):') if content=='q!': break; #_o要去掉,不然會出先error_code:50的報錯 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' ''' 第一種方法 head={} head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' ''' data={} #開發者工具裏有,i和doctype鍵不可少 data['i']=content data['from']='AUTO' data['to']='AUTO' data['smartresult']='dict' data['client']='fanyideskweb' data['salt']='15695569180611' data['sign']='5b0565493d812bc5e713b895c12d615d' data['doctype']='json' data['version']='2.1' data['keyfrom']='fanyi.web' data['action']='FY_BY_REALTTIME' #將字典類型的請求數據轉化爲url編碼,並將編碼類型轉變爲'utf-8'類型 data=urllib.parse.urlencode(data).encode('utf-8') ''' 第一種方法 req=urllib.request.Request(url,data,head) ''' #第二種方法設置User Agent #建立Request對象 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/65.0.3325.181 Safari/537.36') #傳入建立好的Request對象 response=urllib.request.urlopen(req) #讀取響應信息並解碼 html=response.read().decode('utf-8') #使用json將字符串轉化成字典 target=json.loads(html) #結果在key='translateResult'的三層列表的key='tgt'中 print("翻譯結果:%s" %(target['translateResult'][0][0]['tgt'])) #5秒一次 time.sleep(5)  
相關文章
相關標籤/搜索