python爬虫练习1-获取百度翻译结果
提示:python脚本需与js脚本放在同一目录
依赖包:execjs 安装命令:pip install PyExecJS
import requests, execjs, re class Translate: gtk = 0 def __init__(self, trans_str): self.trans_str = trans_str def get_gtk(self): """获取gtk""" headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', } session = requests.session() r = session.get("https://fanyi.baidu.com/translate", headers=headers) self.gtk = re.findall(r"window.gtk = '(.*?)'", r.content.decode())[0] def get_sign(self): """根据gtk和机密算法获取sign""" file = 'b.js' ctx = execjs.compile(open(file).read()) str = "e('1112', '" + self.gtk + "')" self.sign = ctx.eval(str) def main(self): self.get_gtk() self.get_sign() # 请求数据获取翻译结果 # cookie、headers使用https://curlconverter.com/获取更方便 cookies = { 'BIDUPSID': '3D18ACCC2A9A99FDAD0FCC31752F76E5', 'PSTM': '1635406274', 'BAIDUID': 'CF9D511F01E42BADA556A3221A4ACAE5:FG=1', '__yjs_duid': '1_b4837114a08ad6d1ca0d506cf68048841635487632765', 'REALTIME_TRANS_SWITCH': '1', 'FANYI_WORD_SWITCH': '1', 'HISTORY_SWITCH': '1', 'SOUND_SPD_SWITCH': '1', 'SOUND_PREFER_SWITCH': '1', 'MCITY': '-268%3A131%3A', 'BDORZ': 'B490B5EBF6F3CD402E515D22BCDA1598', 'Hm_lvt_64ecd82404c51e03dc91cb9e8c025574': '1635759140,1635766530,1635766535,1636341014', 'H_PS_PSSID': '34448_34068_31254_35062_34505_34917_34606_26350_34971_22159_35018', 'BDSFRCVID': 'OT-OJeC6263U6FnHiyFM5NkfZKhZCYvTH6aoF2bhaGlNhJ7aLA0eEG0PMU8g0Ku-S2-cogKK0mOTHv-F_2uxOjjg8UtVJeC6EG0Ptf8g0f5', 'H_BDCLCKID_SF': 'tJ-JVC0XfC-3fP36q4cqMJDtbxQXKK62aKDs0PoYBhcqEIL4ejrfbt4Vy-QjBUAtBD3h_-QHBlbFjxbSj4Qobj-4barnbMbHtNnJXIo_5l5nhMJR257JDMn3-l3b2t6y523ion6vQpn-KqQ3DRoWXPIqbN7P-p5Z5mAqKl0MLPbtbb0xb6_0Djb-DG_Dt6nfb5kX3Rr_bRvqKROvhjRG558gyxoObtRxtTcgQbcd0RvbsI58MPDbbUPU2GJNLU3kBgTMKT6oJDL-_U3SehjJ3M_tQttjQn345etJhtKEa-nPsR7TyU42hf47yhjd0q4Hb6b9BJcjfU5MSlcNLTjpQT8r5MDOK5OuJRLD_KI-JCDhbnoRq45HMt00qxby26npMg69aJ5y-J7nh-QbKP61LtPF0Howa-Kf523iXD34QpbZ8h5O5p7mKnOyX-JZWp5MQg60Kl0MLPbpel4mWR_VhnkzQxnMBMPjamOnaPQ73fAKftnOM46JehL3346-35543bRTLnLy5KJYMDFle5_BD5QLeHR22PRt5PoJ0RrJ5RrMKROvhjRCQKugyxomtjDfQ25y-nOd24TnJK58MPjADxASjxufLUkqKCOZ0qcz-xopSx7jXn6cD4DNQttjQIrOfIkja-5taK3Ohb7TyU42hf47yhDL0q4Hb6b9BJcjfU5MSlcNLTjpQT8r5MDOK5OhJRLDoKPhtK0WbnO1hnofq4D_MfOtetJyaR39-T6vWJ5TMC_CDp_-Q4CnMqrlW6Qw2Kczabnu0MT-ShPC-tnPD4DJ-tJQWtvZJK6r5CJH3l02Vh6ae-t2ynQD0NKL5-RMW20jWl7mWPLVsxA45J7cM4IseboJLfT-0bc4KKJxbnLWeIJIjj6jK4JKDH-eq6vP', 'BDSFRCVID_BFESS': 'OT-OJeC6263U6FnHiyFM5NkfZKhZCYvTH6aoF2bhaGlNhJ7aLA0eEG0PMU8g0Ku-S2-cogKK0mOTHv-F_2uxOjjg8UtVJeC6EG0Ptf8g0f5', 'H_BDCLCKID_SF_BFESS': 'tJ-JVC0XfC-3fP36q4cqMJDtbxQXKK62aKDs0PoYBhcqEIL4ejrfbt4Vy-QjBUAtBD3h_-QHBlbFjxbSj4Qobj-4barnbMbHtNnJXIo_5l5nhMJR257JDMn3-l3b2t6y523ion6vQpn-KqQ3DRoWXPIqbN7P-p5Z5mAqKl0MLPbtbb0xb6_0Djb-DG_Dt6nfb5kX3Rr_bRvqKROvhjRG558gyxoObtRxtTcgQbcd0RvbsI58MPDbbUPU2GJNLU3kBgTMKT6oJDL-_U3SehjJ3M_tQttjQn345etJhtKEa-nPsR7TyU42hf47yhjd0q4Hb6b9BJcjfU5MSlcNLTjpQT8r5MDOK5OuJRLD_KI-JCDhbnoRq45HMt00qxby26npMg69aJ5y-J7nh-QbKP61LtPF0Howa-Kf523iXD34QpbZ8h5O5p7mKnOyX-JZWp5MQg60Kl0MLPbpel4mWR_VhnkzQxnMBMPjamOnaPQ73fAKftnOM46JehL3346-35543bRTLnLy5KJYMDFle5_BD5QLeHR22PRt5PoJ0RrJ5RrMKROvhjRCQKugyxomtjDfQ25y-nOd24TnJK58MPjADxASjxufLUkqKCOZ0qcz-xopSx7jXn6cD4DNQttjQIrOfIkja-5taK3Ohb7TyU42hf47yhDL0q4Hb6b9BJcjfU5MSlcNLTjpQT8r5MDOK5OhJRLDoKPhtK0WbnO1hnofq4D_MfOtetJyaR39-T6vWJ5TMC_CDp_-Q4CnMqrlW6Qw2Kczabnu0MT-ShPC-tnPD4DJ-tJQWtvZJK6r5CJH3l02Vh6ae-t2ynQD0NKL5-RMW20jWl7mWPLVsxA45J7cM4IseboJLfT-0bc4KKJxbnLWeIJIjj6jK4JKDH-eq6vP', 'delPer': '0', 'PSINO': '2', 'BAIDUID_BFESS': 'CF9D511F01E42BADA556A3221A4ACAE5:FG=1', '__yjs_st': '2_MDAwNTliNDg1MTdkY2FkNzg0N2JlZDkyZjdlMjNjZDEzOWI1ZTcyZmE0ZDIxOWUwYTg3MTI3ZDI5NzliZDA5YWEwYjhkZjM4M2JiOGExMWFhNjc5NDUxNGJjM2Y5ZTYyMzZmOTk4MjU2MjJhOGI0YmVhMDJiOWM4YjM2NGNjZDJhNmU5MzcwOWViYTk4OTdhZTg1Nzk0YzVjZGY0MzI3ZjI2MzQ1OTcyYmNiMzliZjBlNjFjNDQwZjlhODYyMzI0NDRiN2YzZDgxNzAxNWUyMjQ3MGE5ZTgyYjlkZWVlYmU3OGZjYzRiNDUzNmJiZmQ0Zjc3OTUyNTMwOTdiMGQyZF83XzAyZDRmMjIy', 'Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574': '1636386209', 'ab_sr': '1.0.1_YTljZDNlMjM3NzdiYmQ5NTk4NTMxNTc2ZGM1Y2Q2MDAwMTE2OTFkYjZiZDkyMmIzYmE5MmIyYjMwOWU2MjI4ZjBhOTM0NmU4ODU4N2JlNmI0MGE3NWJhNWY0NmQ2ZWNmMjY1ZWE3OTk5YTAzNjg3ZmUwZWE3MzkwZWVhNTg4NzI3NzYyOThiNzYyOTY5MGQxNzNmZTk3NDg5MWQ4OWVmZA==', 'BA_HECTOR': '0k218480010k2h858f1goii6u0q', } headers = { 'Connection': 'keep-alive', 'sec-ch-ua': '"Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"', 'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'sec-ch-ua-mobile': '?0', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 'sec-ch-ua-platform': '"macOS"', 'Origin': 'https://fanyi.baidu.com', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Dest': 'empty', 'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh', 'Accept-Language': 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6', } params = ( ('from', 'zh'), ('to', 'en'), ) data = { 'from': 'zh', 'to': 'en', 'query': '1112', 'transtype': 'translang', 'simple_means_flag': '3', 'sign': self.sign, 'token': 'bccfb308f37f4fc8546087e497580fdb', 'domain': 'common' } dd = requests.post('https://fanyi.baidu.com/v2transapi', headers=headers, params=params, cookies=cookies, data=data).json() return dd["trans_result"]["data"][0]["dst"] if __name__ == "__main__": trans_str = "123456" my_translate = Translate(trans_str) result = my_translate.main() print(result)
b.js
var i = null; function n(r, o) { for (var t = 0; t < o.length - 2; t += 3) { var a = o.charAt(t + 2); a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a), a = "+" === o.charAt(t + 1) ? r >>> a: r << a, r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a } return r } function e(r, gtk) { var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g); if (null === o) { var t = r.length; t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr( - 10, 10)) } else { for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)"" !== e[C] && f.push.apply(f, a(e[C].split(""))), C !== h - 1 && f.push(o[C]); var g = f.length; g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice( - 10).join("")) } var u = void 0, l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107); u = null !== i ? i: (i = gtk || "") || ""; for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) { var A = r.charCodeAt(v); 128 > A ? S[c++] = A: (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)), S[c++] = A >> 18 | 240, S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224, S[c++] = A >> 6 & 63 | 128), S[c++] = 63 & A | 128) } for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++) p += S[b], p = n(p, F); return p = n(p, D), p ^= s, 0 > p && (p = (2147483647 & p) + 2147483648), p %= 1e6, p.toString() + "." + (p ^ m) } function s(a){ return a }