【Python3 爬虫】02_利用urllib.urlopen向百度翻译发送数据并返回结果

上一节进行了网页的简单抓取,接下来我们详细的了解一下两个重要的参数url与data

urlopen详解

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None

URL参数

Open the URL url, which can be either a string or a Request object.

大概意思:URL参数不仅可以是一个字符串也可以是一个对象

data参数

data may be a bytes object specifying additional data to send to the server, or None if no such data is needed. data may also be an iterable object and in that case Content-Length value must be specified in the headers. Currently HTTP requests are the only ones that use data; the HTTP request will be a POST instead of a GET when the data parameter is provided. data should be a buffer in the standard application/x-www-form-urlencoded format. The urllib.parse.urlencode() function takes a mapping or sequence of 2-tuples and returns a string in this format. urllib.request module uses HTTP/1.1 and includes Connection:close header in its HTTP requests.

大概意思:如果没有设置urlopen()函数的data参数,HTTP请求采用GET方式,也就是我们从服务器获取信息,如果我们设置data参数,HTTP请求采用POST方式,也就是我们向服务器传递数据。data参数有自己的格式,它是一个基于application/x-www.form-urlencoded的格式, 因为我们可以使用urllib.parse.urlencode()函数将字符串自动转换成上面所说的格式。

对象作为urlopen参数

urlopen返回的对象不仅可以使用read()进行读取,同时也可以使用geturl(),info(),getcode()方法

  • geturl()返回的是一个url的字符串;

  • info()返回的是一些meta标记的元信息,包括一些服务器的信息;

  • getcode()返回的是HTTP的状态码,如果返回200表示请求成功。

# -*- coding:UTF-8 -*-

from urllib import request

if __name__ == '__main__':
	req = request.Request("http://cn.bing.com/translator?ref=MSTToolbar")
	response = request.urlopen(req)
	#geturl
	print("geturl打印信息:%s"%(response.geturl()))
	print('***************************************')
	#info
	print("info打印信息:%s"%(response.info()))
	print('***************************************')

	#getcode
	print("getcode打印信息:%s"%(response.getcode()))

打印结果:

image

发送data示例

下面是一个向百度翻译传输数据并返回结果的例子:

# -*- coding:UTF-8 -*-

from urllib import request,parse
import json
if __name__ == '__main__':
	#对应上图的url
	Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link'

	#创建字典
	Form_Data = {}
	Form_Data[type] = 'AUTO'
	Form_Data['i'] = 'My name is Alice'
	Form_Data['doctype'] = 'json'
	Form_Data['xmlVersion'] = '1.8'
	Form_Data['keyform'] = 'fanyi.web'
	Form_Data['ue'] = 'ue:utf-8'
	Form_Data['action'] = 'FY_BY_CLICKBUTTON'

    #使用urlcode转换后的标准格式
	data = parse.urlencode(Form_Data).encode("utf-8")

	response = request.urlopen(Request_URL,data)

	html = response.read().decode("utf-8")

	translate_results = json.loads(html)

	translate_results = translate_results['translateResult'][0][0]['tgt']

	print(translate_results)

执行结果如下:

image

posted @ 2018-03-22 17:17  OLIVER_QIN  阅读(1134)  评论(0编辑  收藏  举报