PyQt5实战——翻译的实现,第一次爬取微软翻译经验总结(八)

个人博客:苏三有春的博客
系类往期文章:
PyQt5实战——多脚本集合包,前言与环境配置(一)
PyQt5实战——多脚本集合包,UI以及工程布局(二)
PyQt5实战——多脚本集合包,程序入口QMainWindow(三)
PyQt5实战——操作台打印重定向,主界面以及stacklayout使用(四)
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)
PyQt5实战——UTF-8编码器功能的实现(六)
PyQt5实战——翻译器的UI页面设计以及代码实现(七)

前言

本文虽然被归类于PyQt开发实战,但实际上并没有关于PyQt的相关知识,这篇文章着重基于上篇文章,讲述笔者在开发翻译器时如何做爬取微软翻译网站时的分析,如何获取到网站所需要的信息。这其中也是夹杂了许多笔者个人的猜想与运气才碰出来的,笔者对爬虫也没有做更深的学习,只有一些粗浅的理解,并结合这个项目一点一点摸出来的,可能有更专业的工具与更成体系的知识架构,笔者也要去学习,希望这篇文章对读者能起到一些帮助和启发。

本文从笔者第一次爬取开始讲起,第一次失败了,总结了失败的经验,第二次才爬取成功。

第一次爬取微软翻译

分析

在笔者进行爬虫的时候,首先先打开了浏览器自带的开发者工具查看网络数据,看看在翻译时客户端与服务器之间做了哪些交流

在排查的过程中,发现有一个名称叫做ttranslate...的包引起了笔者的注意,点进去发现这其中确实携带了笔者要翻译的信息

请添加图片描述

从上图中可以看到,包的负载中的表单数据中有一项Text,携带的数据刚好是我们输入的翻译内容你好

打开预览可以看到更详细的信息

请添加图片描述

在这里可以发现:

  • 这里有我们翻译之前的语种,即:zh-Hans,简体中文
  • 翻译后的文本,保存在一个名为translations的数据中,text:Hello,这个数据就是我们要获取的数据,其实这就是对于翻译请求的响应,打开响应界面也是这一串信息

响应界面如下:

请添加图片描述

所以,本质上,笔者就是想要获得对于这个请求的响应,因此笔者的方法是模仿这个包的请求,读取它的响应,从而获得对应的翻译数据。

实践

因此根据爬虫的流程,笔者先获取了ttranslate的请求URL,即:

https://cn.bing.com/ttranslatev3?isVertical=1&&IG=94BF74DDDBA34ECB8B2CFB8D7960E4F9&IID=translator.5025

再获取了请求标头中的User-Agent,即:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0

如下图所示:

请添加图片描述

获取URL是为了获取请求的目的地,获取User-Agent是为了让服务器认为我们是一个人,而不是脚本在自动操作(虽然真的是一个脚本),现在这两者已经获取,我们这段信息就有了身份。(虽然请求标头中还有许多其它的信息,但笔者也没搞懂有什么作用,索性也就没管)

接下来这既然是一个请求,那么我们就需要携带需要请求的消息,消息的格式是什么呢?在负载中可以找到,负载就是请求的内容,如下图所示:

请添加图片描述

显而易见的是,表单数据中携带了我们待翻译内容的语种,翻译结果的语种,以及翻译的数据。我们需要将这些信息放进我们的请求中。

信息收集完毕,开始编写代码(下面展示代码主题,读者需要注意这其中还调用了第三方关于爬虫的库,如报错,请pip install 响应的第三方库)

url = "https://cn.bing.com/ttranslatev3?isVertical=1&&IG=94BF74DDDBA34ECB8B2CFB8D7960E4F9&IID=translator.5025"
header = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0"}
data = {"fromLang":"zh-Hans","to":"en","text":text}
data = urllib.parse.urlencode(data).encode("utf-8")
req = urllib.request.Request(url, data, headers=header)
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
target = json.loads(html)
print(target[0]['translations'][0]['text'])

以下,我们来逐行分析代码:

  • 将刚刚得到的URL存放起来
  • user-agent也存放起来,存放在header字典中
  • 将我们请求的数据:翻译前的语种,翻译后的语种,文本也存放起来,存放在data字典中
  • data进行utf-8加密,转换成响应的url请求格式
  • 使用Request方法发送请求,参数为url,data,header
  • 使用urlopen方法获取响应
  • 将响应解码
  • 将JSON格式的字符串解析成python对象,比如字典,列表等
  • 获取这个target中关于translation列表下的字典的text对应的值

总结

以上,是笔者的第一次爬虫,一开始爬取的时候使用正常,可以正常的使用,但没过多久,翻译器无法使用,无故闪退,笔者开始debug,发现已经无法通过这个url发送请求了。

笔者开始整理,经过多次请求尝试和实验,发现url存在一些端倪:

https://cn.bing.com/ttranslatev3?isVertical=1&&IG=94BF74DDDBA34ECB8B2CFB8D7960E4F9&IID=translator.5025

我们再来看一下这个URL,可以发现,这URL本身就携带了一些信息,IGIID,这两个数据在每次会话结束后,都会发生变化,也就是说,当一个会话结束后,笔者所记录的IGIID就失效了,无法访问,因此,这一次爬虫并不成功,还需要继续改进,获取每次访问微软翻译时的IGIID数据。

结语

总的来说,本文只是笔者在爬虫方向上的一次探索与学习,这是一次失败的尝试,不过可以看出,笔者在学习上的思路,笔者在学习时,喜欢在实践中发现问题并解决问题,因为理论与实践总是存在一定的差距,现实世界总是复杂且多变的。在实践中,你总会发现一些与理论有偏差或者相悖的地方,让你陷入迷茫,但是在实践中,你不会没有一点头绪,相反,在实践中,你有太多太多的方向去验证问题的本质,有时候往往是方向太多,你无法确定哪条路才能通向正确,你害怕做了无用功,害怕走错了方向,因此迟迟不敢动手,才导致了自己的踌躇不前。在现实世界中抽丝剥茧,也是一种学习,虽然笔者在这里也走错了路,离成功还有一段距离,但是走到这里,让笔者学会了如何看网络包,分析请求和响应,学会调用request库,以及最重要的找到了正确的道路,即:接下来,我们要想办法找到每一次IGIID这两个数据如何变,在哪里变,如何获取到那个存放这两个数据的包。致敬技术,希望你变得更强!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端好用的网站分享——CSS(持续更新中)

1.CSS Scan 点击进入CSS Scan CSS盒子阴影大全 2.渐变背景 点击进入color.oulu 3.CSS简化压缩 点击进入toptal 4.CSS可视化 点击进入CSS可视化 这个强推,话不多说,看图! 5.Marko 点击进入Marko 有很多按钮样式 6.getwaves 点击进入getwaves 生…

理解Web登录机制:会话管理与跟踪技术解析(三)-过滤器Filter

在Java Web应用中,Filter(过滤器)是实现登录校验的常见方式。通过Filter,我们能够在请求到达实际的业务逻辑之前,对其进行拦截和处理,从而完成身份校验、权限验证等操作。本文将深入探讨登录校验的实现方法…

FreeBSD将操作系统支持时间从5年缩短为4年 继续与AMD合作

FreeBSD 项目今天发布了 2024 年第三季度进度报告,概述了该开源 BSD 操作系统在上一季度的改进情况。FreeBSD 开发人员仍然非常忙碌,他们在 2024 年第三季度取得的一些成就包括: FreeBSD 发布团队决定将支持时限从五年缩短为四年。 AMD 与 F…

kafka如何获取 topic 主题的列表?

大家好,我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表?】面试题?希望对大家有帮助; kafka如何获取 topic 主题的列表? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,可以…

【网络-交换机】生成树协议、环路检测

路由优先级 路由优先级决定了在多种可达的路由类型中,哪种路由将被用来转发数据包。路由优先级值越低,对应路由的优先级越高,优先级值255表示对应的路由不可达。一般情况下,静态路由的优先级为1,OSPF路由优先级为110&a…

基于Spring Boot的在线装修管理系统的设计与实现,LW+源码+讲解

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#…

【数字图像处理】图像旋转中三种常见插值方法的效果比较:最近邻插值、双线性插值和双三次插值

引言 插值是一种数学方法,用于在已知的数据点之间估计新的数据点。在图像处理中,插值通常用于图像缩放、旋转和其他形态变换。 原始图像 最近邻插值(Nearest-neighbor interpolation) 这是最简单的插值方法,也是计算…

“方块兽神仙猿点石成金”游戏搭建开发

“方块兽神仙猿点石成金”是一款结合了策略和运气的休闲游戏。玩家需在规定时间内向不同的山头投入矿石,等待神仙猿降临并随机选择一座山进行“点石成金”。根据神仙猿的选择,玩家将获得不同的奖励。 游戏核心机制 矿石投入:玩家在游戏开始…

C/C++每日一练:实现选择排序

选择排序 选择排序是一种简单直观的排序算法,时间复杂度为,其中 n 是数组长度,不适合大数据集的排序,适合于元素较少且对性能要求不高的场景。 选择排序的基本思想是:每次从未排序部分选择最小的元素,将其放…

Java8新特性/java

1.lambda表达式 区别于js的箭头函数,python、cpp的lambda表达式,java8的lambda是一个匿名函数,java8运行把函数作为参数传递进方法中。 语法格式 (parameters) -> expression 或 (parameters...) ->{ statements; }实战 替代匿名内部类…

《现代网络技术》读书笔记:SDN数据平面和OpenFlow

本文部分内容来源于《现代网络技术:SDN,NFV,QoE、物联网和云计算:SDN,NFV,QoE,IoT,andcloud》 SDN数据平面 SDN 数据平面也称为基础设施层,而在ITU-T的Y3300标准中则称为资源层,它是网络转发设备根据 SDN控制平面的决策来执行数据…

linux centos 安装redis

安装 wget https://download.redis.io/releases/redis-7.4.0.tar.gz解压redis-7.4.0.tar.gz文件 tar -zxvf redis-7.4.0.tar.gz进入redis安装目录 cd redis-7.4.0make时报错,因为需要安装gcc,gcc安装需要联网安装 修改端口 编辑文件用vi。nano命令cen…

面向对象技术简述(含设计模式)

6.9.2 面向对象技术 面向对象 对象 分类 继承 通过消息的通信 面向对象 对象 分类 继承 通过消息的通信 面向对象对象分类继承通过消息的通信其中包括: 对象 运行的实体;既包含属性/数据,又包含方法/行为/操作数据的函数;…

yakit中的规则详细解释

官方文档 序列前置知识之高级配置 | Yak Program Language 本文章多以编写yaml模版的视角来解释 规则一览 匹配器 在编写yaml中会使用到这里两个东西 点击添加会在返回包的右下角出现匹配器 上面有三个过滤器模式,官方解释 丢弃:丢弃模式会在符合匹配…

算法每日双题精讲——双指针(移动零,复写零)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…

【SpringCloud】Kafka消息中间件

Kafka Kafka消息中间件对比:kafka介绍安装教程:配置以及启动顺序: Kafka整合微服务初级入门测试: Kafka整合SpringBoot①导入spring-kafka依赖信息②消息生产者③消息消费者Postman测试 Kafka 消息中间件对比: 消息中…

ViT模型复现项目实战

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

【Python爬虫实战】DrissionPage 与 ChromiumPage:高效网页自动化与数据抓取的双利器

🌈个人主页:易辰君-CSDN博客 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、DrissionPage简介 (一)特点 (二)安装 (三…

R7:糖尿病预测模型优化探索

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 探索本案例是否还有进一步优化的空间 二、实验环境: 语言环境:python 3.8编译器:Jupyter notebo…