在上一篇文章我们讲述了python爬虫的urllib常用方法,不少同学可能觉得光知道语法有什么用,又干不了什么事情。那么今天作者就带大家用urllib方法实战一番,自己制作一个翻译器。话不多说,直接开始。我会先讲解步骤,如果大家需要完整代码,自行在文章后面取用。

首先,我们应该知道访问浏览器有最基本的两种方法,一种是GET请求,一种是POST请求,而POST请求就是让我们提交表单后获取数据的。这里我们以有道词典为例子。

翻译器的前景(拥有一个翻译器)(1)

我们打开浏览器检查,观察输入表单后提交给浏览器的数据是什么,并观察返回的信息是什么。

翻译器的前景(拥有一个翻译器)(2)

这里点击网络并找到POST类型,标头的请求URL就是我们实际上访问的URL

翻译器的前景(拥有一个翻译器)(3)

图中的表单数据便是我们提交给服务器的数据。

翻译器的前景(拥有一个翻译器)(4)

我们上篇文章讲解到urllib.request.urlopen()方法中的url参数,而它后面还有一个data参数就是我们提交表单的信息。接下来的讲解我将注释在代码块中

import urllib.request#请求模块 import urllib.parse#解析模块 import json#因服务器返回给我们的数据是json格式,所以导入json模块 content = input('请输入翻译的内容:') url = "https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"#可能由于有道反爬的原因,translate_o需去掉_o才能访问 data = {}#我们刚才通过检查得到的表单数据,并把‘你好’换成content变量以便我们进行获取用户输入 data['i']= content data['from']= 'AUTO' data['to']= 'AUTO' data['smartresult']= 'dict' data['client']= 'fanyideskweb' data['salt']= '16433365722367' data['sign']= 'c6dfd9517dabbd06daf30f59d793d070' data['lts']= '1643336572236' data['bv']= '082450d6885d59a8c7e47aa0f339dfba' data['doctype']= 'json' data['version']= '2.1' data['keyfrom']= 'fanyi.web' data['action']='FY_BY_REALTlME' data = urllib.parse.urlencode(data).encode('utf-8')#将data先翻译成浏览器能读懂的类型编码为utf-8格式,因为data参数是字节流类型 response = urllib.request.urlopen(url,data)#访问 html = response.read().decode('utf-8')#将获取的数据解码为utf-8格式防止乱码 target = json.loads(html)#json格式加载 print('翻译结果是:%s'% (target['translateResult'][0][0]['tgt']))

翻译器的前景(拥有一个翻译器)(5)

图中translateResult便是我们需要的数据。最后让我们看看运行的结果如何。

翻译器的前景(拥有一个翻译器)(6)

大功告成,最后希望大家多多关注我,喜欢我的文章给我点个赞,我会经常分享实用有趣的知识。

,