日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python 爬蟲如何實(shí)現(xiàn)百度翻譯

瀏覽:29日期:2022-07-05 13:02:15

環(huán)境

python版本號(hào) 系統(tǒng) 游覽器 python 3.7.2 win7 google chrome

關(guān)于本文

本文將會(huì)通過爬蟲的方式實(shí)現(xiàn)簡(jiǎn)單的百度翻譯。本文中的代碼只供學(xué)習(xí),不允許作為于商務(wù)作用。商務(wù)作用請(qǐng)前往api.fanyi.baidu.com購買付費(fèi)的api。若有侵犯,立即刪文!

實(shí)現(xiàn)思路

在網(wǎng)站文件中找到隱藏的免費(fèi)api。傳入api所需要的參數(shù)并對(duì)其發(fā)出請(qǐng)求。在返回的json結(jié)果里找到相應(yīng)的翻譯結(jié)果。

百度翻譯的反爬機(jī)制

由js算法生成的sign cookie檢測(cè) token暗號(hào)

在網(wǎng)站文件中找到隱藏的免費(fèi)api

進(jìn)入百度翻譯,隨便輸入一段需要翻譯的文字。當(dāng)翻譯結(jié)果出來的時(shí)候,按下F12,選擇到NETWORK,最后點(diǎn)進(jìn)XHR文件。這個(gè)時(shí)候,網(wǎng)站文件都已經(jīng)加載完了,所以要F5刷新一下。

python 爬蟲如何實(shí)現(xiàn)百度翻譯

刷新了之后,我們就能發(fā)現(xiàn)一個(gè)以v2transapi?開頭的文件,沒錯(cuò),它就是我們要找的api接口。讓我們驗(yàn)證一下,點(diǎn)進(jìn)去文件-preview,我們就可以在json格式的數(shù)據(jù)里面找到翻譯結(jié)果,驗(yàn)證成功。另外,我們還需要獲取我們的cookie和token,在之后的反爬機(jī)制中我們需要用到它們,位置如以下。cookie位置:

python 爬蟲如何實(shí)現(xiàn)百度翻譯

token位置:

python 爬蟲如何實(shí)現(xiàn)百度翻譯

api信息

接口:https://fanyi.baidu.com/v2tra...請(qǐng)求方式:post

請(qǐng)求參數(shù)大全

參數(shù) 介紹 from 源語言 to 目標(biāo)語言 query 翻譯文本 sign 由js算法生成的簽名(反爬) token 請(qǐng)求暗號(hào)

開始寫代碼

導(dǎo)入request和execjs庫

import requestsimport execjs requests HTTP庫,用于爬蟲 execjs 用于調(diào)用js代碼

反反爬蟲

由于百度翻譯有cookie識(shí)別反爬機(jī)制,所以我們?cè)O(shè)置好我們剛剛獲取到的cookie來進(jìn)行掩護(hù)網(wǎng)絡(luò)蜘蛛身份。

headers = {’cookie’:’請(qǐng)?jiān)谶@里輸入你的cookie’}

另外,我們還要設(shè)置好token(暗號(hào))。

token = ’請(qǐng)?jiān)谶@里放置你的token’

最后只剩下sign反爬機(jī)制了,sign是由js算法給譯文生成的一個(gè)簽名。我在網(wǎng)上搜了一下,找到了相應(yīng)的js算法,分享給大家。

var i = '320305.131321201'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) { 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 = window[l] || '') || ''; 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)}

等等,我們不是在用python進(jìn)行爬蟲嗎?那我們又不會(huì)js代碼,怎么調(diào)用啊?還好python有著強(qiáng)大的第三方庫,當(dāng)然也少不了調(diào)用js代碼的庫。調(diào)用js代碼的庫很多,但是本人還是推薦大家使用execjs,簡(jiǎn)單功能又完整。

在調(diào)用js算法代碼之前,我們還需要讓用戶輸入一段譯文。

q = input(’翻譯:’)

之后我們就能使用execjs的compile和call方法來獲取sign了。

js = ’’’var i = '320305.131321201'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) { 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 = window[l] || '') || ''; 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)}’’’sign = execjs.compile(js).call('e',q)

(以上代碼獲取了sign)

經(jīng)過一系列的反反爬蟲準(zhǔn)備,我們就可以設(shè)置好的“源語言”和“目標(biāo)語言”最后的這兩個(gè)參數(shù)了。

From = ’en’To = ’zh’

(以上代碼代表著英譯中,若要進(jìn)行其它語言的翻譯,請(qǐng)輸入語言對(duì)應(yīng)的英文縮寫,英文縮寫對(duì)應(yīng)表將會(huì)放到本文最后)接著,我們就能構(gòu)建參數(shù)json了。

data = {’from’:From,’to’:To,’query’:q,’sign’:sign,’token’:’14b5f31e3c65d89a0b1c3f756e53942e’}

最后,我們就能請(qǐng)求數(shù)據(jù)并打印了。

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

我們發(fā)現(xiàn)打印出來的結(jié)果是個(gè)json字典,翻譯結(jié)果就在其中,我們只需要翻譯結(jié)果,所以我們可以索引翻譯結(jié)果的位置再打印。

text = requests.post(url,headers=headers,data=data).json()[’trans_result’][’data’][0][’dst’]print(text)

運(yùn)行結(jié)果:

python 爬蟲如何實(shí)現(xiàn)百度翻譯

完整代碼:

import requestsimport execjsurl = ’https://fanyi.baidu.com/v2transapi’headers = {’cookie’:’你的cookie’}js = ’’’var i = '320305.131321201'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) { 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 = window[l] || '') || ''; 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)}’’’From = ’源語言’To = ’目標(biāo)語言’token = ’你的token’q = input(’翻譯:’)sign = execjs.compile(js).call('e',q)data = {’from’:From,’to’:To,’query’:q,’sign’:sign,’token’:token}text = requests.post(url,headers=headers,data=data).json()[’trans_result’][’data’][0][’dst’]print(text)

語言英文縮寫對(duì)應(yīng)表

{’zh’: ’中文’,’jp’: ’日語’,’jpka’: ’日語假名’,’th’: ’泰語’,’fra’: ’法語’,’en’: ’英語’,’spa’: ’西班牙語’,’kor’: ’韓語’,’tr’: ’土耳其語’,’vie’: ’越南語’,’ms’: ’馬來語’,’de’: ’德語’,’ru’: ’俄語’,’ir’: ’伊朗語’,’ara’: ’阿拉伯語’,’est’: ’愛沙尼亞語’,’be’: ’白俄羅斯語’,’bul’: ’保加利亞語’,’hi’: ’印地語’,’is’: ’冰島語’,’pl’: ’波蘭語’,’fa’: ’波斯語’,’dan’: ’丹麥語’,’tl’: ’菲律賓語’,’fin’: ’芬蘭語’,’nl’: ’荷蘭語’,’ca’: ’加泰羅尼亞語’,’cs’: ’捷克語’,’hr’: ’克羅地亞語’,’lv’: ’拉脫維亞語’,’lt’: ’立陶宛語’,’rom’: ’羅馬尼亞語’,’af’: ’南非語’,’no’: ’挪威語’,’pt_BR’: ’巴西語’,’pt’: ’葡萄牙語’,’swe’: ’瑞典語’,’sr’: ’塞爾維亞語’,’eo’: ’世界語’,’sk’: ’斯洛伐克語’,’slo’: ’斯洛文尼亞語’,’sw’: ’斯瓦希里語’,’uk’: ’烏克蘭語’,’iw’: ’希伯來語’,’el’: ’希臘語’,’hu’: ’匈牙利語’,’hy’: ’亞美尼亞語’,’it’: ’意大利語’,’id’: ’印尼語’,’sq’: ’阿爾巴尼亞語’,’am’: ’阿姆哈拉語’,’as’: ’阿薩姆語’,’az’: ’阿塞拜疆語’,’eu’: ’巴斯克語’,’bn’: ’孟加拉語’,’bs’: ’波斯尼亞語’,’gl’: ’加利西亞語’,’ka’: ’格魯吉亞語’,’gu’: ’古吉拉特語’,’ha’: ’豪薩語’,’ig’: ’伊博語’,’iu’: ’因紐特語’,’ga’: ’愛爾蘭語’,’zu’: ’祖魯語’,’kn’: ’卡納達(dá)語’,’kk’: ’哈薩克語’,’ky’: ’吉爾吉斯語’,’lb’: ’盧森堡語’,’mk’: ’馬其頓語’,’mt’: ’馬耳他語’,’mi’: ’毛利語’,’mr’: ’馬拉提語’,’ne’: ’尼泊爾語’,’or’: ’奧利亞語’,’pa’: ’旁遮普語’,’qu’: ’凱楚亞語’,’tn’: ’塞茨瓦納語’,’si’: ’僧加羅語’,’ta’: ’泰米爾語’,’tt’: ’塔塔爾語’,’te’: ’泰盧固語’,’ur’: ’烏爾都語’,’uz’: ’烏茲別克語’,’cy’: ’威爾士語’,’yo’: ’約魯巴語’,’yue’: ’粵語’,’wyw’: ’文言文’,’cht’: ’中文繁體’ }

以上就是python 爬蟲如何實(shí)現(xiàn)百度翻譯的詳細(xì)內(nèi)容,更多關(guān)于python 爬蟲實(shí)現(xiàn)百度翻譯的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: 百度 Python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情久久五月| 精品国产乱码久久久| 日韩电影免费网站| 老牛国内精品亚洲成av人片| 国产欧美日韩影院| 欧美亚洲tv| 欧美韩一区二区| 久久永久免费| 欧美国产偷国产精品三区| 精品伊人久久| 欧美亚洲日本精品| 精品捆绑调教一区二区三区| 久久精品1区| 国产99久久| 在线综合亚洲| 亚洲在线久久| 日韩精品欧美大片| 国产亚洲精品美女久久久久久久久久| 国产探花一区在线观看| 国产精品久久久久久久免费软件| 精品午夜久久| 久久精品卡一| 香蕉精品999视频一区二区| 亚洲日本三级| 国产精品xxx| 亚洲美女久久精品| 午夜在线精品偷拍| 国产乱码精品一区二区三区亚洲人 | 日韩精品一二三| 一区二区高清| 国产精品白丝av嫩草影院| 国产va免费精品观看精品视频| 性欧美xxxx免费岛国不卡电影| 国产一区二区精品| 日韩激情综合| 国产一区二区三区黄网站| 99免费精品| 日韩精品免费视频人成| 精品一区二区三区中文字幕| 亚洲一级二级| 久久国产精品免费一区二区三区| 久草精品视频| 亚洲女同中文字幕| 欧美综合社区国产| a日韩av网址| 蜜臀a∨国产成人精品| 国产欧美日韩免费观看| 在线观看精品| 日韩综合一区二区三区| 成人在线免费观看网站| 伊人久久成人| 国产精品a级| 亚洲国产一区二区在线观看| 国产日韩欧美在线播放不卡| 99久久99视频只有精品| 国产日韩欧美中文在线| 日韩欧美一区二区三区在线观看 | 日韩一区二区在线免费| 亚洲综合色婷婷在线观看| 久久久久久婷| 亚洲资源网站| 亚洲va中文在线播放免费| 婷婷久久免费视频| 日韩不卡在线| 奇米狠狠一区二区三区| 日韩欧美在线中字| 久久国产麻豆精品| 亚洲激情欧美| 高清在线一区| 欧美日本久久| 国产毛片久久| 91日韩欧美| 欧美亚洲tv| 久久国产精品久久w女人spa| 97精品97| 国产精品男女| 免费看日韩精品| 视频福利一区| 欧美aaaaaa午夜精品| 视频在线观看一区二区三区| a天堂资源在线| 欧美一区二区三区久久精品| 狠狠久久婷婷| 91综合视频| 国产精品成人国产| 欧美专区一区二区三区| 精品视频一区二区三区四区五区 | 91精品91| 新版的欧美在线视频| 欧美成人精品午夜一区二区| 亚洲日本国产| 蜜乳av另类精品一区二区| 久久久久美女| 日韩精品91| 国产91在线播放精品| 国产亚洲一区| 亚洲三级网址| 免播放器亚洲| 亚洲激情另类| 免费视频亚洲| 99tv成人| 日韩久久精品网| 中文字幕在线官网| 国产在线观看91一区二区三区| 久久国际精品| 88久久精品| 欧美久久亚洲| 国产视频一区二| 国产亚洲一卡2卡3卡4卡新区| 蜜臀久久久久久久| 国产亚洲在线| 麻豆亚洲精品| 午夜在线精品| 蜜臀精品一区二区三区在线观看 | 999精品一区| 另类中文字幕国产精品| 精品国产美女a久久9999| 国产精品1区| 欧美精品不卡| 久久精品国产99国产| 久久69成人| 久久久久观看| 欧美xxxx中国| 欧美日韩国产v| 久久要要av| 黄页网站一区| 蜜桃视频免费观看一区| 日本亚州欧洲精品不卡| 欧美在线不卡| 国产一区二区三区视频在线| 日韩国产一区| 午夜欧美视频| 亚洲精品中文字幕99999| 日韩精品a在线观看91| 国产欧美日韩精品一区二区三区| 国产精品扒开腿做爽爽爽软件| 国产探花一区| 岛国精品一区| 久久精品91| 久久先锋影音| 久久国产乱子精品免费女| 麻豆精品一区二区综合av| 中文字幕高清在线播放| 国产真实久久| 夜夜精品视频| 欧美一区成人| 国产色播av在线| 黄色在线一区| 欧美伊人影院| 日韩专区精品| 男女精品网站| 欧美在线日韩| 国产日韩电影| 视频在线观看一区| 国产精品va| 秋霞国产精品| 天堂俺去俺来也www久久婷婷| 欧美日一区二区三区在线观看国产免| 蜜桃精品视频| 国产一区久久| 日本色综合中文字幕| 国产精品久久久久蜜臀| 好吊视频一区二区三区四区| 日韩成人午夜精品| 狠狠久久伊人中文字幕| 91精品高清| 亚洲一二av| 麻豆91小视频| 蜜桃一区二区三区| 亚洲精品极品| 女生影院久久| 亚洲日本久久| 国产精品黑丝在线播放| 石原莉奈在线亚洲二区| 久久中文在线| 三级欧美韩日大片在线看| 你懂的国产精品永久在线| 欧美在线资源| 国产精品一区亚洲| 亚洲婷婷免费| 国产午夜久久av| 91视频一区| 亚洲伊人影院| 国产精品久久观看| 亚洲精选久久| 亚洲一区资源| 日韩一区精品| 99精品综合| 91国内精品| 婷婷成人在线| 日韩欧美久久| 99免费精品| 国产免费av国片精品草莓男男| 在线观看精品| 欧美精品三级在线| 欧美日韩少妇| 国产精品三级| 蘑菇福利视频一区播放| 国产一区精品福利| 亚洲人成网站在线在线观看|