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中super的用法实例
May 28 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
详解Python字典小结
Oct 20 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
Django的models中on_delete参数详解
Jul 16 Python
python中必要的名词解释
Nov 20 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
python代码实现备忘录案例讲解
Jul 26 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php单例模式实现方法分析
2015/03/14 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
python中lambda与def用法对比实例分析
2015/04/30 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
django 模型字段设置默认值代码
2020/07/15 Python
python判断变量是否为列表的方法
2020/09/17 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
python反扒机制的5种解决方法
2021/02/06 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
会员活动策划方案
2014/08/19 职场文书
农行心得体会
2014/09/02 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
六查六看自查报告
2014/10/14 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python