爬取一些翻译

百度翻译

在这里插入图片描述
找到百度翻译这个页面,右键检查,点到Network,再点一下XHR,再在那块翻译板上随便输入点什么,再删除,直到出现sug这个接口,点到sug,我们看一下Response,可以很清楚的看到是一个json字符串,从Headers中的General可以清楚的看到这是一个post请求,From Data里的kw参数就是你要翻译的数据
演示如下:

import requests


url = 'https://fanyi.baidu.com/sug'

headers = {
    
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
}
# kw后面跟的值就是你要翻译的数据,好像是自动英汉识别,没试过其他语种,大家可以去试一下
data = {
    
    
    'kw':'我爱你'
}

res = requests.post(url=url,headers=headers,data=data)
# 要是不确定是否是一个json数据,也可以先打印一下text,看一下
content = res.json()
print(content)# 现在的content是一个字典和裂变嵌套格式的数据,要取里面的数据可以根据字典取值的方式去取
# {'errno': 0, 'data': [{'k': '我爱你', 'v': '名. I love you; <法>Je t’aime; <德>Ich liebe Dich; <日'}, {'k': '我爱你一生一世', 'v': 'I love you forever'}]}

有道翻译

在这里插入图片描述
这里我们找到的借口url是 http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule,你去请求这个url的话,返回的一直是一个 {‘errorCode’: 50},把那个translate后面的 _o 去掉就好了

import requests


def youdao(data):
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

    headers = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36',

    }
    data = {
    
    
        'i': data,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': '16158628760095',
        'sign': 'b5dbf92bc727fef70c8b8576006f8f69',
        'lts': '1615862876009',
        'bv': '818e2470a16ccb5d68270d01f2d298b2',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME',
    }

    res = requests.post(url=url,headers=headers,data=data)
    content = res.json()
    print(content)
    print(content['translateResult'][0][0]['tgt'])

if __name__ == '__main__':
    youdao('我爱你')
# {'type': 'ZH_CN2EN', 'errorCode': 0, 'elapsedTime': 0, 'translateResult': [[{'src': '我爱你', 'tgt': 'I love you'}]]}
# I love you

这是一个便捷的方法,当然如果不通过这种方法而是通过去破解网站的js加密也是可以的

import requests


url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
# 这是一般网站的常见反扒机制,可见在这里也是可以行的痛的
headers = {
    
    
    'Cookie': '[email protected]; JSESSIONID=aaaADqzynZotsc_p9sJHx; OUTFOX_SEARCH_USER_ID_NCOO=868568444.170369; ___rl__test__cookies=1616574848293',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
    'Referer': 'http://fanyi.youdao.com/',
}

data = {
    
    
    'i': 'job',
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '16165748482990',
    'sign': 'bf58c758752eec37af623bb1fd8049fb',
    'lts': '1616574848299',
    'bv': 'c2d117fd881e2494bf8ae431925a0494',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlM',
}

res = requests.post(url=url,headers=headers,data=data)
print(res.text)
# {"translateResult":[[{"tgt":"工作","src":"job"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. 工作;职业\r\n","vt. 承包;代客买卖\r\n","vi. 做零工\r\n"],"type":1}}

但是通过我们的测试,这样就只能翻译job这一个单词,我们一将i的值改变就又会出现{“errorCode”:50},所以我们可以猜测应该和from data里面的数据有关,所以我又去在网页上翻译了一个数据,我们将他们的from data对比发现只有下面的几组数据是变得

"""
i: job
salt: 16165748482990
sign: bf58c758752eec37af623bb1fd8049fb
lts: 1616574848299

i: hello
salt: 16165776702054
sign: 49d2036d2794e1bf7d83e6a9ab2086f0
lts: 1616577670205
"""

这几组数据应该是网页js动态加载的,所以我们直接去js去查询
在这里插入图片描述
最后通过层层查找,找到了
在这里插入图片描述

var r = function(e) {
    
    
        var t = n.md5(navigator.appVersion)
          , r = "" + (new Date).getTime()
          , i = r + parseInt(10 * Math.random(), 10);
        return {
    
    
            ts: r,
            bv: t,
            salt: i,
            sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
        }
    };


> (new Date).getTime()
> 1616578252394
> parseInt(10 * Math.random(), 10)
> 4

我们使用python代码来模拟js加密
这是最后的代码

import requests
import time
import random
import hashlib

def get_data(data):
    url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

    headers = {
    
    
        'Cookie': '[email protected]; JSESSIONID=aaaADqzynZotsc_p9sJHx; OUTFOX_SEARCH_USER_ID_NCOO=868568444.170369; ___rl__test__cookies=1616574848293',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
        'Referer': 'http://fanyi.youdao.com/',
    }

    """
    var r = function(e) {
            var t = n.md5(navigator.appVersion)
              , r = "" + (new Date).getTime()
              , i = r + parseInt(10 * Math.random(), 10);
            return {
                ts: r,
                bv: t,
                salt: i,
                sign: n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
            }
        };
    """

    ts = str(int(time.time()))
    salt = ts + str(random.randint(0,9))
    # n.md5("fanyideskweb" + e + i + "Tbh5E8=q6U3EXe+&L[4c@")
    # e就是要翻译的数据
    md5 = hashlib.md5()
    md5.update(("fanyideskweb" + data + salt + "Tbh5E8=q6U3EXe+&L[4c@").encode())
    sign = md5.hexdigest()

    data = {
    
    
        'i': data,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': salt,
        'sign': sign,
        'lts': ts,
        'bv': 'c2d117fd881e2494bf8ae431925a0494',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlM',
    }
    """
    i: job
    salt: 16165748482990
    sign: bf58c758752eec37af623bb1fd8049fb
    lts: 1616574848299
    
    i: hello
    salt: 16165776702054
    sign: 49d2036d2794e1bf7d83e6a9ab2086f0
    lts: 1616577670205
    """

    res = requests.post(url=url,headers=headers,data=data)
    print(res.text)

get_data('我爱你')
# {"translateResult":[[{"tgt":"I love you","src":"我爱你"}]],"errorCode":0,"type":"zh-CHS2en","smartResult":{"entries":["","I love you\r\n"],"type":1}}

猜你喜欢

转载自blog.csdn.net/hmh4640219/article/details/114820739
今日推荐