python爬蟲學習-有道翻譯

破解

  • 獲取url
  • 發送數據的方式
  • 構造數據
  • 獲取結果

獲取url

能夠經過chrome的開發者工具network查看請求發生的詳細數據,獲取到頭部數據,以及發送的數據javascript

發送數據方式

get和post通常二選一,經過查看數據的詳細信息,獲得請求爲post方式java

構造數據

多請求幾回,弄清楚每一個字段的含義,而後構造各個字段。主要是4個字段在變化.在youdao.js中能夠找到各個字段的含義 salt : i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)) sign: # o = n.md5("fanyideskweb" + "word" + salt + "ebSeFb%=XZ%T[KZ)c(sy!");python

ts: 爲完整的時間戳字符串 bv: 客戶端版本的md5,不換客戶端這個值不會變化web

獲取結果

經過python3的requests庫,得到發送以後的結果,並將其輸出。chrome

後續

若是請求次數多了以後有道官方是否回封ip,若是封ip的話,須要用ip代理以及多請求頭來實現一個完整的代碼來實現一個工具。json

# -*- coding: utf-8 -*-


import requests
import random
import time
import hashlib

word = "今天晚上下雨"
appversion = "5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36"

data = {
        "i": word,
        "from": "AUTO",
        "to": "AUTO",
        "smartresult": "dict",
        "client": "fanyideskweb",
        "doctype": "json",
        "version": "2.1",
        "keyfrom": "fanyi.web",
        "action": "FY_BY_REALTlME"
}

salt = str(int(time.time() * 1000) + random.randint(0, 9))
sign = hashlib.md5()
sign.update("".join([
        "fanyideskweb", word, salt, "@6f#X3=cCuncYssPsuRUE"
]).encode("utf-8"))
sign = sign.hexdigest()

bv = hashlib.md5()
bv.update("".join([appversion]).encode("utf-8"))
bv=bv.hexdigest()

data["salt"] = salt
data["sign"] = sign
data["ts"] = str(int(time.time() * 1000))
data["bv"] = bv


headers = {
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
        "Connection": "keep-alive",
        "Content-Length": "251",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Cookie": "OUTFOX_SEARCH_USER_ID=-399226185@10.108.160.19; JSESSIONID=aaaI_UrHnAfSw6oMdoRTw; OUTFOX_SEARCH_USER_ID_NCOO=670443238.5496794; ___rl__test__cookies=1560871983956",
        "Host": "fanyi.youdao.com",
        "Origin": "http://fanyi.youdao.com",
        "Referer": "http://fanyi.youdao.com/",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36",
        "X-Requested-With": "XMLHttpRequest"
}

url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
response = requests.post(url, data=data, headers=headers)
print(response.text)

複製代碼
相關文章
相關標籤/搜索