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 相关文章推荐
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
20招让你的Python飞起来!
Sep 27 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Python使用plotly绘制数据图表的方法
Jul 18 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
python获取交互式ssh shell的方法
Feb 14 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 Python
Python编写车票订购系统 Python实现快递收费系统
Aug 14 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
桌面中心(二)数据库写入
2006/10/09 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
vue中post请求以a=a&b=b 的格式写遇到的问题
2018/04/27 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
python模块之time模块(实例讲解)
2017/09/13 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
PHP高级工程师面试问题推荐
2013/01/18 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
少儿节目主持串词
2014/04/02 职场文书
幼师求职自荐信
2014/05/31 职场文书
建筑工地标语
2014/06/18 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
交通安全教育心得体会
2016/01/15 职场文书