python爬取百度翻译结果,需要发送俩次请求。

一次是请求获取输入的语言类型,然后是拿着获取到的语言类型发送下一次请求,获取翻译的结果。

先输入英文“hello”,获取结果

可以发现,输入后返回的翻译结果在这个文件中,接着输入中文“爬虫”进行翻译

发现页面没有重新加载,所以这是由动态页面加载,网址只有from和to后面发生变化,可以猜测后面的元素就是原先语言的类型和想要翻译的类型,而且这是个post请求方式,所以查看一下post的数据部分

post的data部分俩个参数from和to,query就是自己输入的词语,查看上一个请求的内容:

也是返回json数据,其中就有一个参数lan,对应值为zh,可以猜测这个请求是返回此次输入词语的语言类型的。

首先请求获取语言类型:

post的data部分就是输入的词语:

当我们输入中文时会返回zh,所以对应的from值就为zh,to值就为en

    def get_lang(self, lang_data):  # 获取语言类型        return lang_data["lan"], "en" if lang_data["lan"] == "zh" else "zh"

比较难的部分是翻译部分,请求获取到翻译后的结果:

试了几次后发现,这次请求的post数据部分的sign值和token值是必须要加的,且每次输入要翻译的词语后,sign值都会不一样,这时候找一下sign值是哪来的。浏览器控制台打开搜索:

很多都只是包含sign的词语而已,而不是sign,换成输入sign:

第3个有from,to,query,和sign值,和获取翻译结果的请求结果key值一样,所以试着在这里打上断点调试,重新刷新页面,而不是点击翻译:

执行到此处停下,然后进入这里的L函数里,一步一步执行:

这里就跳转到了e函数,而这里传入的参数r就是我们输入的词语,猜测这里的e函数有可能就是把我们输入的词语进行了加密后再输出,把这里e函数整个复制出来,然后在node.js中运行

这里报错说i未定义,回到浏览器找到源码:

这里的i值赋值给u,然后u的值为"320305.1313212101",不清楚i值是哪里来的,先看他是不是个变值,换了给词语搜索后重复步骤发先u值不变,所以就直接在js代码中直接定义一个i值给u,然后接着运行:

var i = "320305.131321201"

又说n未定义,回到浏览器继续执行下一步,找到了n函数,然后也复制进js代码,接着执行:

这时候返回了一个值,比较一下,和输入“爬虫”是返回的sign值一样,这时候爬虫代码基本可以实现出来了。

当输入一个词语时,翻译的结果在["dict_result"]["simple_means"]["word_means"]中,返回一个列表,列表中是这个词语的多个翻译结果:

但是当输入的是一句中文长句子时,程序会报KeyError错误,表明无法找到对应的key值,于是重新查看浏览器,发现原先的json数据中没有["dict_result"]["simple_means"]["word_means"]键值,猜测是百度翻译也对输入的内容进行了分类,如果输入的是句子,则定位到["trans_result"]["data"][0]["dst"]:

这里我用异常处理这里无法翻译中文句子的问题:

        try:print("翻译:" + str(html_dict["dict_result"]["simple_means"]["word_means"]))  # 翻译单词:可以得到多个单词意思except KeyError:print("翻译:" + str(html_dict["trans_result"]["data"][0]["dst"]))  # 翻译句子

全部代码如下(代码中给了自己的注释):

BaiDuSpider.py:

import requests
import json
import execjs
"""爬百度翻译实现中英互译单词和句子(解决了输入中文句子无法翻译的bug),全部代码封装进类里"""class BaiDuFanYi:def __init__(self):self.lang_url = "https://fanyi.baidu.com/langdetect"self.trans_url = "https://fanyi.baidu.com/v2transapi?from={}&to={}"self.headers = {"Accept": "*/*","Accept-Encoding": "gzip, deflate, br","Accept-Language": "zh-CN,zh;q=0.9","Connection": "keep-alive","Content-Length": "137","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36","Cookie": "BIDUPSID=6753787919BFC4FF60BAD5DC3900D4FA; PSTM=1646125121; BAIDUID=6753787919BFC4FF6E12938C140804C3:FG=1; FANYI_WORD_SWITCH=1; REALTIME_TRANS_SWITCH=1; HISTORY_SWITCH=1; SOUND_PREFER_SWITCH=1; SOUND_SPD_SWITCH=1; APPGUIDE_10_0_2=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDUSS=JaMmUzTnhFVnFqS2JoUGJZQURVWkJuN3ZEM0lYU1cwWTZ5TC1UbUhLYmhta3BpSVFBQUFBJCQAAAAAAAAAAAEAAABBEVakZ3JlYXTC3dD91OUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOENI2LhDSNid1; BDUSS_BFESS=JaMmUzTnhFVnFqS2JoUGJZQURVWkJuN3ZEM0lYU1cwWTZ5TC1UbUhLYmhta3BpSVFBQUFBJCQAAAAAAAAAAAEAAABBEVakZ3JlYXTC3dD91OUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOENI2LhDSNid1; BDSFRCVID_BFESS=-pAOJexroG0RYrTD5hL5hMjtieKKUdrTDYLEOwXPsp3LGJLVgW2wEG0PtoWBG_u-K4eiogKK3gOTHxtF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tbke_It2tC03H48k-4QEbbQH-UnLqh8jJgOZ04n-ah02Vxo-5x8hjt0TM-cB-Pch-jnD-Jom3UTdsq76Wh35K5tTQP6rLt-J55Q4KKJxbpbAEJra5MckWMPOhUJiB5JMBan7XPbIXKohJh7FM4tW3J0ZyxomtfQxtNRJ0DnjtpChbC0RD5-hjTJM-l-X5to05TIX3b7EfKocKq7_bJ7KhUbQ0RrH2f0t2goMBp6_bnTqOpvabb5xQhFT5-nfXpOe-n7rKhc1QJ3Rh43HQT3m5-4iL4Jd-CriJIT0Wb3cWKOJ8UbS2bOPBTD02-nBat-OQ6npaJ5nJq5nhMJmb67JDMr0eGteJTttJbAs3t88KJjEe-Kk-PnVeIuQLtnZKRvHa2kjbfT-Qp-hjh4GMMc85-F8yPRPKnjn3N5rKl75yUJ5qKOsQU6d34-iDlJ405OTbIOU5q37b66vMb5YhPJvyTtsXnO7hn3lXbrtXp7_2J0WStbKy4oTjxL1Db3JKjvMtgDtVJO-KKCMMC0GDf5; BAIDUID_BFESS=9A8D3FB44C050878949771408EEDD45F:FG=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1646570203,1646646587,1646646601,1646646834; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1646646834; ab_sr=1.0.1_NGNlMzYwMGM2Y2IyMmFhNzA2N2E1YTUwYmJjN2NkMDMyYTM5NjgyOTM3NmUwYzZjOWUwZGVjZDE0MzY2MGM0ODU4NGMwYzY1NGZhZmEyYzUzYjIzNWRjMDBlNzdhZTkyMDEyMzQ3OTdiZjQ2ZGMyM2U0ZGY4NDBmZDdjYjM5YzZkZTFkZjUzMGM1ZDE2YzZiNTIxYWQ2MTJjNWEwZWEwNWZiZjZhMmZiZTYwYTRhZWEzZWM0YzNmMmFmMGQxZmI5","Host": "fanyi.baidu.com","Origin": "https://fanyi.baidu.com","Referer": "https://fanyi.baidu.com/?aldtype=16047","sec-ch-ua": '"Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"',"sec-ch-ua-mobile": "?0","sec-ch-ua-platform": '"Windows"',"Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","X-Requested-With": "XMLHttpRequest"}def parse_url(self, url, post_data):# print(url)response = requests.post(url, headers=self.headers, data=post_data)html_str = response.content.decode()return json.loads(html_str)def get_lang(self, lang_data):  # 获取语言类型return lang_data["lan"], "en" if lang_data["lan"] == "zh" else "zh"def encryption_js(self, word):  # 加密数据with open("baidufanyisign.js", "r", encoding='utf-8') as f:  # 读取js代码js_code = f.read()js_compile = execjs.compile(js_code)  # 编译js代码return js_compile.call("e", word)  # 调用js代码中e函数,传入参数word,返回sign值def save(self, html_dict):try:print("翻译:" + str(html_dict["dict_result"]["simple_means"]["word_means"]))  # 翻译单词:可以得到多个单词意思except KeyError:print("翻译:" + str(html_dict["trans_result"]["data"][0]["dst"]))  # 翻译句子def run(self):while True:word = input("请输入一个单词或句子:")if word == "!":  # 输入!退出程序break# 构造post请求头的数据lang_post_data = {"query": word}# 构造urllang_data = self.parse_url(self.lang_url, lang_post_data)# 发送请求,获取语言类型lang_from, lang_to = self.get_lang(lang_data)# print("from:" + lang_from + "to:" + lang_to)# 加密数据,获取sign值sign = self.encryption_js(word)# 构造翻译结果post请求头的数据trans_post_data = {"from": lang_from,"to": lang_to,"query": word,"transtype": "translang","simple_means_flag": "3",  # 必须的参数。"sign": str(sign),  # 必须的参数。关键值:通过sign.js加密"token": "63671731f58420a45480f5badfff7b2c","domain": "common"}# 构造翻译urlself.trans_url.format(lang_from, lang_to)# 发送请求,获取翻译结果html_dict = self.parse_url(self.trans_url, trans_post_data)# 提取数据,输出self.save(html_dict)if __name__ == '__main__':fanyi_spider = BaiDuFanYi()fanyi_spider.run()

baidufanyisign.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)}console.log(e("爬虫"))

运行:

可以实现中英互译,并且可以支持翻译中英文句子。

爬虫实现中英文的词语和句子互译相关推荐

  1. 爬虫加tkinter做的中英互译小软件

    import translators as ts wyw_text = '季姬寂,集鸡,鸡即棘鸡.棘鸡饥叽,季姬及箕稷济鸡.' chs_text = '季姬感到寂寞,罗集了一些鸡来养,鸡是那种出自荆棘 ...

  2. JAVA——实现各国中英文名称互译功能的查询程序

    用JAVA实现各国中英文名称互译功能的查询程序 创建一个字典文件,其内容为各个国家的中英文对照表,以查询国名为目的,对各个国家的国名进行中英互译. 1.功能: 输入"中国"则在屏上 ...

  3. 机器翻译:引入注意力机制的Encoder-Decoder深度神经网络训练实战中英文互译(完结篇)

    文章目录 前言 一.数据的预处理 二.模型配置 三.模型训练 总结 前言 注意力机制是一种在深度学习中广泛使用的技术,它可以有效地处理输入序列和输出序列之间的对应关系.其中,Encoder-Decod ...

  4. 计算机英语短文互译,中英文互译的英语短文

    在英语学习中,阅读能力是学习者发展其它语言能力(听.说.写.译)的基础.阅读能力的高低,不仅决定了学习者获取知识和信息的水平,而且在一定程度上也反映出学习者综合运用英语的能力.小编精心收集了中英文互译 ...

  5. 亿愿Word文档批量多语言翻译---word文档翻译专家!几十种语言随意快速互译!可以生成中外文,中英文对照内容文档!

    亿愿Word文档批量多语言翻译-软件功能简介 [亿愿Word文档批量多语言翻译]采用目前最强大的.国际著名公司的谷歌翻译引擎,自动识别语言种类,把英文.日文.韩文.德文.法文.俄文等几十种外国语言的文 ...

  6. python爬虫之英汉互译(爬虫+pyqt5)

    简单的爬虫与图形化界面的结合 源码转载自[https://blog.csdn.net/qq_38534107/article/details/90440403] 作者:耳森Paulson 在此十分感谢 ...

  7. 功夫熊猫中英文字幕版好句子_了解熊猫中的带有复制警告的设置

    功夫熊猫中英文字幕版好句子 SettingWithCopyWarning is one of the most common hurdles people run into when learning ...

  8. 中英文互译在线翻译-在线翻译软件

    中英文互译在线翻译哪个软件好用,今天给大家分享一款免费好用的批量翻译器,汇集了世界上最好的几个翻译平台(百度/谷歌/有道),为什么这么多人使用它?首先第一点翻译质量高,选择性多.第二点支持各种语言互译 ...

  9. 中英文互译之Excel表格

    在做英文数据库时,进行数据去重整理会在excel表格中操作. 很多英文标题或摘要看不懂,需要复制到翻译软件中进行翻译. 有没有办法可以直接在表格中给出翻译呢? 基于此,COOC开发了这一功能,提取出的 ...

最新文章

  1. html 资源缓存,解决index.html缓存问题
  2. 计算机课做ppt的软件有哪些内容,课程内容计算机软件的基础知识.ppt
  3. python从基础到入门电子书_零基础如何学好python?一本python从入门到实践电子书籍赠送...
  4. Dubbo之RPC架构
  5. beetl模板引擎之自定义html标签,Beetl模板引擎自定义分页标签
  6. 前端项目难点及解决方法_预埋件施工重点难点的解决方法
  7. 5.14 js对象 函数 js操作document对象
  8. php长轮询阻塞,ajax长轮询时php被阻塞
  9. 字符串转内存c语言,【一起学C】C语言面试题必考:字符串操作函数,内存操作函数实现...
  10. .NET Core 3.0中的Cookie身份验证
  11. AngularJS指令范围中的#39;@#39;和#39;=#39;有什么区别?
  12. WIN10 修改MAC地址
  13. 怀念经理用鼠标线联网的1990年代当时
  14. 算法复杂度描述中为什么用“logn”,而不用“log2n”、“lnn”或“lgn”
  15. JWT全面解读、详细使用步骤
  16. 上海亚商投顾:沪指缩量跌0.43%
  17. 孙俪邓超港籍身份曝光揭明星卯足劲加入港籍
  18. 软件测试职业发展三步曲之一 - 软件测试职业发展方向
  19. static(静态变量,方法)
  20. Android 获得联系人并排序

热门文章

  1. 7-1 查找书籍 (20 分)给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息
  2. (十)Scratch制作《贪吃蛇》,超详细
  3. 番外篇:韩国网游兴起
  4. 开篮球馆需要什么_建立一个篮球馆需要什么!
  5. 商城应用类app该怎么制作
  6. 伊利诺伊香槟分校计算机科学,UIUC的CS「伊利诺伊大学香槟分校计算机科学系」...
  7. 视频图像数据处理八:将rgb视频图像转换为yuv420格式视频图像
  8. 超好用的画图工具推荐
  9. 智力游戏(搬山游戏)
  10. 切换WiFi并配置静态或动态IP