热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫(七十四)用urllib实现英语翻译小工具

今天带来一个小小的例子,众所周知,如果看到不懂得英语单词,句子,肯定需要翻译工具来辅助我们进行学习,所以我们趁

今天带来一个小小的例子,众所周知,如果看到不懂得英语单词,句子,肯定需要翻译工具来辅助我们进行学习,所以我们趁热打铁,上节课学习了 urllib这个爬虫工具库,我们接下来小试牛刀吧

这篇文章我们将以 百度翻译 为例,分析网络请求的过程,然后使用 urllib 编写一个英语翻译的小模块

1、准备工作

首先使用 Chrome 浏览器打开 百度翻译,这里,我们选择 Chrome 浏览器自带的开发者工具对网站进行抓包分析

2、抓包分析

打开 Network 选项卡进行监控,并选择 XHR 作为 Filter 进行过滤

然后,我们在输入框中输入待翻译的文字进行测试,可以看到列表中出现三个数据包

分别是 sug、v2transapi 和 langdetect,下面我们一个一个进行分析

② 然后,我们可以打开 sug 数据包的 Headers 选项卡分析请求数据,使用程序模拟发送请求,基本信息如下:

General:基本参数

Request URL : https://fanyi.baidu.com/sug

Request Method : POST

Request Headers:请求头部

User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64) AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.67 Safari/537.36 

—— 用户代理

Form Data:表单数据

kw : 你好 —— 翻译的内容

③ 下面祭上完整的代码

import urllib.request
import urllib.parse
import json
def translate(text):# 参数检验if not text:return 'None'# 请求网址url = "https://fanyi.baidu.com/sug"# 表单数据params = {'kw':text}data = urllib.parse.urlencode(params).encode('utf-8')# 请求头部headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 构造请求对象req = urllib.request.Request(url=url,data=data,headers=headers)# 发送请求,获得响应response = urllib.request.urlopen(req)# 解析数据content = json.loads(response.read().decode('utf-8'))if content['errno'] == 0: # 一切正常result = content['data'][0]['v']else: # 发生错误result = 'Error'# 返回结果return result
if __name__ == "__main__":while True :text = input('翻译内容:')result = translate(text)print("翻译结果:%s" % result)

可以看到,上面的代码虽然可以完美翻译中文和英文,但是却不能翻译句子!

这可怎么办呀?别急,不是还有两个数据包没有分析嘛,再看看还有没有其它办法吧

(2)分析 v2transapi 数据包

① 打开 v2transapi 数据包的 Preview 选项卡查看响应结果,这里面竟然也有我们需要的翻译结果

② 接下来,我们还是打开 v2transapi 数据包的 Headers 选项卡查看请求数据,其基本信息如下:

General:基本参数

Request URL : https://fanyi.baidu.com/v2transapi —— 请求网址

Request Method : POST —— 请求方法,

Request Headers:请求头部

User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 —— 用户代理

Form Data:表单数据

query : 你好 —— 翻译的内容

from : zh —— 翻译内容的语言类型,zh 代表中文,设置为 auto 可自动检测

to : en —— 翻译结果的语言类型,en 代表英文,设置为 auto 可自动检测

sign 和 token:加密参数

唉,只想简简单单爬个翻译,竟然还要涉及密码破解,没办法,只好请教百度了

一查才知道,原来百度翻译有一个公开的 API,根本就不需要涉及加密解密

只需要把上面的请求地址改成 https://fanyi.baidu.com/transapi 就可以了

③ 下面同样祭上完整的代码,其实和上面的十分类似

import urllib.request
import urllib.parse
import jsondef translate(text):# 参数检验if not text:return 'None'# 请求网址url = "https://fanyi.baidu.com/transapi"# 表单数据params = {'query':text,'from':'auto','to':'auto'}data = urllib.parse.urlencode(params).encode('utf-8')# 请求头部headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 构造请求对象req = urllib.request.Request(url=url,data=data,headers=headers)# 发送请求,获得响应response = urllib.request.urlopen(req)# 解析数据content = json.loads(response.read().decode('utf-8'))result = content['data'][0]['dst']# 返回结果return resultif __name__ == "__main__":while True :text = input('翻译内容:')result = translate(text)print("翻译结果:%s" % result)

3、相关拓展

有道翻译的爬取和百度翻译的十分类似,这里也顺便提及一下

我们还是先来打开数据包的 Headers 选项卡查看请求数据,其基本信息如下:

General:基本参数

Request URL : http://fanyi.youdao.com/translate_o —— 请求网址

Request Method : POST —— 请求方法

Request Headers:请求头部

User-Agent:Mozilla/5.0(WindowsNT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 —— 用户代理

Form Data:表单数据

i: 你好 —— 翻译的内容

doctype : json —— 数据类型,指定为 JSON

from : AUTO —— 翻译内容的语言类型,自动检测

to : AUTO —— 翻译结果的语言类型,自动检测

sign 和 salt:加密参数

和百度翻译的很类似,都设置了加密参数,怎么办?也和百度翻译类似,修改一下请求地址就好

话不多说,直接放代码:

import urllib.request
import urllib.parse
import jsondef translate(text):# 参数检验if not text:return 'None'# 请求网址url = "https://fanyi.youdao.com/translate"# 表单数据params = {'i':text,'doctype':'json','from':'AUTO','to':'AUTO'}data = urllib.parse.urlencode(params).encode('utf-8')# 请求头部headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 构造请求对象req = urllib.request.Request(url=url,data=data,headers=headers)# 发送请求,获得响应response = urllib.request.urlopen(req)# 解析数据content = json.loads(response.read().decode('utf-8'))if content['errorCode'] == 0: # 一切正常result_tup = (item['tgt'] for item in content['translateResult'][0])result = ''.join(result_tup)else: # 发生错误result = 'Error'# 返回结果return resultif __name__ == "__main__":while True :text = input('翻译内容:')result = translate(text)print("翻译结果:%s" % result)

请继续关注我

记得点赞加关注哦,记得加鸡腿啊


推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
他给我留下的美好_813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有