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)

复制代码
相关文章
相关标签/搜索