当前位置: 首页 > news >正文

用Python爬虫制作一个简易翻译器

我们通常是通过requests+BS4的方法来获取网页内容,这种方法导入模块较多,速度相对有点儿慢,此时我们可以用requests的post方法向指定服务器发送请求,获取数据后格式化为json,然后获取相关键值。这种方法用到了requests和json两个模块,通过headers进行伪装。

一、获取网页翻译源码

import requests# 定义请求的 URL 和数据
url = 'https://fanyi.so.com/index/search'
data = {'eng': '1', 'validate': '', 'ignore_trans': '0', 'query': 'as well'}
# 伪装
headers = {'useragent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36 Edg/128.0.0.0','pro': 'fanyi'
}# 发送 POST 请求并获取响应
response = requests.post(url=url, headers=headers, data=data).json()# 提取翻译文本
translated_text = response['data']['fanyi']
print(translated_text)

二、代码解读

1. URL 和请求数据:请求的目标 URL 是 http://fanyi.so.com,用于查询翻译结果。请求数据中,query 是我们需要翻译的文本,这里设定为 "as well"。

2. 请求头:通过 headers 指定浏览器标识,模拟真实用户访问。这样可以避免请求被认为是机器人访问而被拦截。

3. POST 请求:使用 requests.post() 发送 POST 请求,并将服务器返回的 JSON 响应转换为字典。

4. 提取翻译:响应数据的 data['fanyi'] 字段包含了翻译后的文本。代码最后将该翻译结果输出。

三、优化代码

上面的代码有几个问题1.不是连续提问,2. 只能英译汉,3. 没有列出音标。于是,我们根据需求又对上述代码进行更新。增加while循环,可以连续提问题;同时判断翻译后的结果和要翻译的内容是否一致,如果一致说明语言设置那里有误就进行更改eng为2;同时加入try...except,增加获取单词音标phonetic。于时,我们就得到下面的代码:

import requests,jsonurl = 'https://fanyi.so.com/index/search'headers = {'useragent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Mobile Safari/537.36 Edg/128.0.0.0','pro':'fanyi'}while True:word = input("请输入单词:")data = {'eng':'1','validate':'','ignore_trans':'0','query': word,}JSON = requests.post(url=url,headers=headers,data=data).json()meaning = JSON['data']['fanyi']if meaning == word: #判断译文和原文是否一致data = {'eng':'2','validate':'','ignore_trans':'0','query': word,}JSON = requests.post(url=url,headers=headers,data=data).json()   meaning = JSON['data']['fanyi']    try:phonetic = JSON['data']['explain']['phonetic']['英']except:phonetic = ""print(word,phonetic,meaning)

代码运行结果显示结果如下:

代码运行结果

四、注意事项

1. 如果想获取请求的域名,要通过chrome打开网页,输入一个单词如hello,然后按下F12,查看标头,找到请求网址。

获取请求网址

2. 在载荷中找到post的数据,存入到data变量:

找到发送的数据内容。

3. 发送的数据变量data中eng的键值为1是英译中,2是中译英。

http://www.lryc.cn/news/437836.html

相关文章:

  • Shader Graph Create Node
  • 共模干扰的形成和滤除
  • (计算机网络)运输层
  • 基于深度学习的信号滤波:创新技术与应用挑战
  • MFC工控项目实例之十一板卡测试信号输入界面
  • sql中索引查看是否生效
  • SpringBoot常见面试题
  • springboot优雅停机无法关闭进程,kill无法停止springboot必须kill -9,springboot线程池使用
  • 【系统架构设计师-2015年真题】案例分析-答案及详解
  • MongoDB设置系统服务启动教程
  • mysql学习教程,从入门到精通,MySQL WHERE 子句(10)
  • 设计模式】Listener模式和Visitor模式的区别
  • 基于事件序列的数据获取
  • 太速科技-基于XC7Z100+AD9361的双收双发无线电射频板卡
  • 探索UWB技术的独特优势:实现高精度定位
  • 软件安装攻略:Sublime Text 下载安装和使用教程
  • ip地址为什么要轮换
  • C++ 继承【一篇让你学会继承】
  • DeviceNet网关HT3S-DNS-MDN读取七星华创CS310空气流量计数据应用案例
  • Smartbi体验中心新增系列Demo,用户体验更丰富
  • Kubernetes 与 springboot集成
  • 以太网传输出现不分包
  • [实践应用] 深度学习之激活函数
  • Java基础之数组
  • 基于SpringBoot+Vue的智慧自习室预约管理系统
  • pptpd配置文件/etc/pptpd.conf详解
  • springboot对数据库进行备份+对一个文件夹内的文件按时间排序,只保留最近的8个文件
  • 【软考中级攻略站】-软件设计师(4)-计算机网络基础
  • Android以及IoT设备传感器软件开发总结
  • Vue2/Vue3中编程式路由导航实践总结