Python爬虫学习之翻译小程序


Posted in Python onJuly 30, 2019

本次博客分享的内容为基于有道在线翻译实现一个实时翻译小程序,本次任务是参考小甲鱼的书《零基础入门学习Python》完成的,书中代码对于当前的有道词典并不适用,使用后无法实现翻译功能,在网上进行学习之后解决了这一问题。

2、前置工作

1)由于有道在线翻译是“反爬虫”的,所以在编写该程序的时候需要使用到User-Agent,通过使用request模块中的headers参数,对它进行适当的设置就可以将程序访问伪装为浏览器访问,有两种方法可以添加headers参数,我使用的方法是通过add_header()方法往Request对象中添加headers参数;

2)我使用的是360浏览器,获取它User-Agent的方法是在地址栏中输入about:version即可,结果如下图:

Python爬虫学习之翻译小程序

3)在获得该参数后还需要获取有道翻译的data数据,首先先打开有道翻译界面,然后打开其审查元素,点击netwoek,然后在翻译框内输入word点击翻译,找到如下图所示的位置:

Python爬虫学习之翻译小程序

4)一直往下滑动,就可以找到data参数,在编程时的设置就需要按照这里来完成,如下图:

Python爬虫学习之翻译小程序

其中在headers中需要设置的Referer及User-Agent也在上图中可以找到。

3、任务代码

在程序的编写中需要使用到许多python模块,包括urllib、json 、time等等。

对于urllib在上一篇博客中已经用到了,它的作用是一个高级的 web 交流库,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象。

json是一种轻量级的数据交换格式,易于人阅读和编写,我们需要使用json.loads 解码 json数据。

time是用于获取当前时间戳并延迟提交数据,延迟提交数据虽然会降低工作效率,但是也降低了ip被网页拉黑的风险。

具体的代码如下图所示:

import urllib.request #导入urllib.request库
import urllib.parse #导入urllib.parse库
import json #导入json库
import time #导入time库
import random #导入random库
import hashlib #导入hashlib库
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" #有道翻译的网址
while True: #定义死循环
 fanyi = input("请输入想要翻译的内容:") #用户输入想要翻译的内容
 #设置API接口
 a = 'fanyideskweb'   #设置client
 b = fanyi    #需要翻译的内容
 c = str(int(time.time() * 1000)+ random.randint(1, 10)) #当前时间戳
 d = 'rY0D^0\'nM0}g5Mm1z%1G4'   #加密字符
 sign = hashlib.md5((a +b +c + d).encode('utf - 8')).hexdigest() #根据内容进行md5加密
 #设置data,按照网页审查元素设置即可
 data = {}
 data['i'] = fanyi
 data['from'] = 'AUTO'
 data['to'] = 'AUTO'
 data['smartresult'] = 'dict'
 data['client'] = 'fanyideskweb'
 data['salt'] = c
 data['sign'] = sign
 data['doctype'] = 'json'
 data['version'] = '2.1'
 data['keyform'] = 'fanyi.web'
 data['action'] = 'FY_BY_CLICKBUTTION'
 data['typoResult'] = 'true'
 data = urllib.parse.urlencode(data).encode('utf - 8') #urlencode转换data数据并编码为utf-8码
 req = urllib.request.Request(url, data)  #指定网页,包含url、data和head
 #伪造浏览器访问
 req.add_header('Referer','http://fanyi.youdao.com')
 req.add_header('User - Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE')
 response = urllib.request.urlopen(req)  #post方式打开指定网页
 html = response.read()   #读取网页信息
 html = html.decode('utf - 8')  #将utf-8码解码为unicode码
 target = json.loads(html)   #把json页面转换为一个字典
 print("翻译结果: %s" % (target['translateResult'][0][0]['tgt'])) #输出
 time.sleep(5) #延迟提交数据

运行结果如下图所示:

Python爬虫学习之翻译小程序

4、总结

书上的知识是否正确还需要自己敲一边代码才能进行验证,所以说动手才是最重要的,本次制作这个翻译小程序,由于书本知识的错误,我通过网上查找资料才解决了这个问题,从中也学到了许多知识,希望自己能继续加油,学到更多的知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python+Django在windows下的开发环境配置图解
Nov 11 Python
python获得两个数组交集、并集、差集的方法
Mar 27 Python
简单介绍Python中用于求最小值的min()方法
May 15 Python
python实现解数独程序代码
Apr 12 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
python中正则表达式与模式匹配
May 07 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Keras搭建自编码器操作
Jul 03 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 Python
安装docker-compose的两种最简方法
Jul 30 #Python
Django的性能优化实现解析
Jul 30 #Python
Python爬虫学习之获取指定网页源码
Jul 30 #Python
django-初始配置(纯手写)详解
Jul 30 #Python
django 单表操作实例详解
Jul 30 #Python
Apache部署Django项目图文详解
Jul 30 #Python
Python 使用list和tuple+条件判断详解
Jul 30 #Python
You might like
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
PHP会话控制实例分析
2016/12/24 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
详解Python中where()函数的用法
2018/03/27 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
竞聘书怎么写,如何写?
2014/03/31 职场文书
公司新年寄语
2014/04/04 职场文书
教师辞职书范文
2015/02/26 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
你知道Java Spring的两种事务吗
2022/03/16 Java/Android