Python爬蟲學習之翻譯小程序
本次博客分享的內容為基于有道在線翻譯實現(xiàn)一個實時翻譯小程序,本次任務是參考小甲魚的書《零基礎入門學習Python》完成的,書中代碼對于當前的有道詞典并不適用,使用后無法實現(xiàn)翻譯功能,在網(wǎng)上進行學習之后解決了這一問題。
2、前置工作
1)由于有道在線翻譯是“反爬蟲”的,所以在編寫該程序的時候需要使用到User-Agent,通過使用request模塊中的headers參數(shù),對它進行適當?shù)脑O置就可以將程序訪問偽裝為瀏覽器訪問,有兩種方法可以添加headers參數(shù),我使用的方法是通過add_header()方法往Request對象中添加headers參數(shù);
2)我使用的是360瀏覽器,獲取它User-Agent的方法是在地址欄中輸入about:version即可,結果如下圖:

3)在獲得該參數(shù)后還需要獲取有道翻譯的data數(shù)據(jù),首先先打開有道翻譯界面,然后打開其審查元素,點擊netwoek,然后在翻譯框內輸入word點擊翻譯,找到如下圖所示的位置:

4)一直往下滑動,就可以找到data參數(shù),在編程時的設置就需要按照這里來完成,如下圖:

其中在headers中需要設置的Referer及User-Agent也在上圖中可以找到。
3、任務代碼
在程序的編寫中需要使用到許多python模塊,包括urllib、json 、time等等。
對于urllib在上一篇博客中已經(jīng)用到了,它的作用是一個高級的 web 交流庫,其核心功能就是模仿web瀏覽器等客戶端,去請求相應的資源,并返回一個類文件對象。
json是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,我們需要使用json.loads 解碼 json數(shù)據(jù)。
time是用于獲取當前時間戳并延遲提交數(shù)據(jù),延遲提交數(shù)據(jù)雖然會降低工作效率,但是也降低了ip被網(wǎng)頁拉黑的風險。
具體的代碼如下圖所示:
import urllib.request #導入urllib.request庫
import urllib.parse #導入urllib.parse庫
import json #導入json庫
import time #導入time庫
import random #導入random庫
import hashlib #導入hashlib庫
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" #有道翻譯的網(wǎng)址
while True: #定義死循環(huán)
fanyi = input("請輸入想要翻譯的內容:") #用戶輸入想要翻譯的內容
#設置API接口
a = 'fanyideskweb' #設置client
b = fanyi #需要翻譯的內容
c = str(int(time.time() * 1000)+ random.randint(1, 10)) #當前時間戳
d = 'rY0D^0\'nM0}g5Mm1z%1G4' #加密字符
sign = hashlib.md5((a +b +c + d).encode('utf - 8')).hexdigest() #根據(jù)內容進行md5加密
#設置data,按照網(wǎng)頁審查元素設置即可
data = {}
data['i'] = fanyi
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = c
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyform'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'true'
data = urllib.parse.urlencode(data).encode('utf - 8') #urlencode轉換data數(shù)據(jù)并編碼為utf-8碼
req = urllib.request.Request(url, data) #指定網(wǎng)頁,包含url、data和head
#偽造瀏覽器訪問
req.add_header('Referer','http://fanyi.youdao.com')
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 QIHU 360SE')
response = urllib.request.urlopen(req) #post方式打開指定網(wǎng)頁
html = response.read() #讀取網(wǎng)頁信息
html = html.decode('utf - 8') #將utf-8碼解碼為unicode碼
target = json.loads(html) #把json頁面轉換為一個字典
print("翻譯結果: %s" % (target['translateResult'][0][0]['tgt'])) #輸出
time.sleep(5) #延遲提交數(shù)據(jù)
運行結果如下圖所示:

4、總結
書上的知識是否正確還需要自己敲一邊代碼才能進行驗證,所以說動手才是最重要的,本次制作這個翻譯小程序,由于書本知識的錯誤,我通過網(wǎng)上查找資料才解決了這個問題,從中也學到了許多知識,希望自己能繼續(xù)加油,學到更多的知識。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用Python3中的gettext模塊翻譯Python源碼以支持多語言
這篇文章主要介紹了使用Python3中的gettext模塊翻譯Python源碼以支持多語言,其中翻譯Python源碼只是作為示例以展示gettext的功能和用法,需要的朋友可以參考下2015-03-03
Python?matplotlib.pyplot.hist()繪制直方圖的方法實例
直方圖(Histogram)又稱質量分布圖,是一種統(tǒng)計報告圖,由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況,一般用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況,下面這篇文章主要給大家介紹了關于Python?matplotlib.pyplot.hist()繪制直方圖的相關資料,需要的朋友可以參考下2022-06-06
如何實現(xiàn)更換Jupyter Notebook內核Python版本
這篇文章主要介紹了如何實現(xiàn)更換Jupyter Notebook內核Python版本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05
Python首次安裝后運行報錯(0xc000007b)的解決方法
最近在安裝完Python后運行發(fā)現(xiàn)居然報錯了,錯誤代碼是0xc000007b,于是通過往上查找發(fā)現(xiàn)是因為首次安裝Python缺乏VC++庫的原因,下面通過這篇文章看看如何解決這個問題吧。2016-10-10
淺談pandas中DataFrame關于顯示值省略的解決方法
下面小編就為大家分享一篇淺談pandas中DataFrame關于顯示值省略的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python制作定時發(fā)送信息腳本的實現(xiàn)思路
這篇文章主要介紹了python實現(xiàn)企業(yè)微信定時發(fā)送文本消息的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

