当前位置: 首页 > 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是中译英。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot自动装配中的Condition机制
  • 【kubernetes】配置管理中心Configmap运用
  • 使用左右指针方法解决最长无重复字符子串问题
  • 网络学习-eNSP配置路由器
  • 再遇“类和对象”
  • 杰发科技Bootloader(3)—— 基于7801的APP切到Boot
  • java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)
  • 常用 Excel 笔记
  • shell的使用sed处理数据
  • 链表专题(Golang)
  • SpringBoot集成MyBatis-Plus
  • 如何在多台电脑上同步 VSCode配置和插件
  • N-152基于java贪吃蛇游戏5
  • 【论文阅读】视觉分割新SOTA: Segment Anything(SAM)
  • 【ABAP】ole2 excel多sheet导入导出
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Bytom交易说明(账户管理模式)
  • Docker入门(二) - Dockerfile
  • Hibernate最全面试题
  • httpie使用详解
  • jquery cookie
  • Python - 闭包Closure
  • Rancher如何对接Ceph-RBD块存储
  • Spring Cloud中负载均衡器概览
  • Spring声明式事务管理之一:五大属性分析
  • vuex 学习笔记 01
  • 高程读书笔记 第六章 面向对象程序设计
  • 汉诺塔算法
  • 排序(1):冒泡排序
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 1.Ext JS 建立web开发工程
  • #职场发展#其他
  • ${factoryList }后面有空格不影响
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C11) 泛型表达式
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)scrum常见工具列表
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net refrector
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET分布式缓存Memcached从入门到实战
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @JsonFormat 和 @DateTimeFormat 的区别
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝