有道翻譯的爬取
Python作為爬蟲的強大人盡皆知,一個人不使用python爬取些什么,那么他的Python生涯一定是不完整的,這里簡單寫一下用Python爬取有道翻譯的教程。
關於有道翻譯的爬取網上鏈接很多,這里爬取的時候發現有道反爬蟲機制有一個小bug,直接繞過就可以了。
話不多說,現在開始。
一 服務器數據的獲取
打開有道翻譯:http://fanyi.youdao.com/ (本人用谷歌瀏覽器)
右擊檢查、點擊network
在翻譯框輸入任意字符后點擊headers
將每一項挨個點開,尋找post項(瀏覽器向服務器返回數據一項)
這里得到返回的服務器地址:
Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
向服務器返回的數據向下拖可以看到:
這些數值將以字典形式返回到服務器。其中(salt,sign,ts,bv)四種形式為反爬蟲機制需要的數據,我們把它刪去就好(為什么這個反爬蟲沒生效?)
然后將返回地址http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
改為:
http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
二 python代碼的書寫
由於urllib自帶對返回數據的處理,我們只需要將返回值以字典的形式傳入,並且通過
Data=urllib.parse.urlencode(dir)即可對數據進行處理,生成返回值
通過request.Urlopen返回一個字典:
用json處理后讀取即可
三 結果如下圖
本人在此處還搭配了itchat,實現微信的簡單翻譯。
四 源碼如下
from urllib import request
import urllib
import json
import itchat,os,pinyin,shutil
from itchat.content import *
def youdao_tran(tran_word):
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={'i':tran_word,
'from':'AUTO',
'to':'AUTO',
'smartresult':'dict',
'client':'fanyideskweb',
'doctype':'json',
'version':'2.1',
'keyfrom':'fanyi.web',
'action':'FY_BY_REALTIME',
'typoResult':'false'}
data=urllib.parse.urlencode(data).encode('utf-8')
responce=request.urlopen(url,data)
reply=json.loads(responce.read().decode(encoding='utf-8'))['translateResult'][0][0]['tgt']
print(reply)
return reply
@itchat.msg_register(TEXT)#只對文本信息進行操作
def auto_reply(msg):
if msg['Text'].split(':')[0]=='翻譯':
defaultReply = youdao_tran(msg['Text'].split(':')[1])
return defaultReply
# 為了讓實驗過程更加方便(修改程序不用多次掃碼),我們使用熱啟動
itchat.auto_login(hotReload=True)#生成Qcode碼,掃描成功即可登錄網頁版微信
itchat.run()