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内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
Python批量发送post请求的实现代码
May 05 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
python实现简单http服务器功能
Sep 17 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
python 数据库查询返回list或tuple实例
May 15 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
js对象基础实例分析
2015/01/13 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
Python3爬虫全国地址信息
2019/01/05 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
高三体育教学反思
2014/01/29 职场文书
会计电算化实训报告
2014/11/04 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
增值税发票丢失证明
2015/06/19 职场文书
初中体育课教学反思
2016/02/16 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书