Python零基础入门二十之爬虫之抓取有道词典

来源:互联网 发布:法国著名睡衣品牌知乎 编辑:程序博客网 时间:2024/05/16 01:40

这篇博客在上一篇的基础上,继续深入学习爬虫的技巧。上一篇博客中通过从网页上抓取一张简单的图片简单了解了urllib.request中的模块的用法,今天在学习一个有道词典的例子。

这个例子主要是实现我们在Python中实现有道词典的功能,还是通过抓取有道词典的翻译的核心代码来实现。

首先我们先打开有道词典的网页来踩踩点。

这里写图片描述
有了url之后还不行,我们这次不是抓取图片,而是要向网页中发送数据,所以要找到网页提交的表单。

继续往下看,便找到了我们的表单数据

这里写图片描述

这样之后,我们的踩点工才完成了,下面开始代码的编写。在编写代码之前,我们再说一下urlopen这个函数:

这里写图片描述

关于data的数据类型过的问题,Python文档中也给出了我们答案

这里写图片描述

上述文档中主要的字段我给翻译过来了:
对于HTTP POST请求方法,数据应该是标准应用程序/ x-www-form-urlencoded格式的缓冲区。 urllib.parse.urlencode()函数接受2元组的映射或序列,并返回此格式的ASCII字符串。它应该被编码为字节,然后用作数据参数。

也就是说我们首先需要将表单数据以二元组序列存储起来,这里我们使用字典,然后使用urllib.parse.urlencode()函数将数据进行格式的转换,最后对数据进行编码。

在这里,先简单的说一下decode和encode两个函数的作用:

decode 的作用是将其他编码的字符串转换成 Unicode 编码,
eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码
encode 的作用是将Unicode编码转换成其他编码的字符串,
eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码
Python中使用的编码是Unicode编码。

import urllib.requestimport jsonurl='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict2.index'#建立一个字典data={}data['type'] = 'AUTO'data['i'] = 'exciting'data['doctype'] = 'json'data['xmlVersion'] = '1.8'data['keyfrom'] = 'fanyi.web'data['ue'] = 'UTF-8'data['action'] = ['FY_BY_CLICKBUTTON']data['typoResult']= 'true'#在这里还不能直接将data作为参数,需要进行一下数据的解析才可以#encode是将Unicode的编码转换成utf-8编码data=urllib.parse.urlencode(data).encode('utf-8')response=urllib.request.urlopen(url,data)#decode作用是将其他形式的编码转换成python使用的Unicode编码html=response.read().decode('utf-8')target=json.loads(html)print(target['translateResult'][0][0]['tgt'])

其实我们获得的html数据是这样的:

这里写图片描述

我们可以看到我们要找的数据就在里面,我们需要将里面的数据提取出来,其实这是一个json类型的数据,我们可以使用json模块的loads方法解析出该字符串,实际上就是反序列化操作。经过反序列或操作之后我们便可以得到一个字典,然后一步步便可以提取出我们要的数据。

上述代码只是实现了一个比较简单的有道词典,下一篇博客将对此进行完善,完善之后的有道词典才能算的上一个简单的爬虫应用小程序。

1 0
原创粉丝点击