学科分类
目录
网络爬虫

分析urlopen方法

前面在爬取网页的时候,有一句核心的爬虫代码,如下所示:

response = urllib.request.urlopen('http://www.baidu.com')

该代码调用的是urllib.request模块中的urlopen方法,它传入了一个百度首页的URL,使用的协议是HTTP,这是urlopen方法最简单的用法。

其实,urlopen方法可以接收多个参数,该方法的定义格式如下所示:

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

上述方法定义中的参数详细介绍如下:

(1)url: 表示目标资源在网站中的位置,可以是一个表示URL地址的字符串,也可以是一个urllib.request对象。

(2)data:用来指明向服务器发送请求的额外信息。HTTP协议是Python支持的众多网络通信协议(如HTTP、HTTPS、FTP等)中唯一一个使用data参数的。也就是说,只有打开http网址的时候,data参数才有作用。除此之外,官方API还指出:

  • data必须是一个bytes对象。

  • data必须符合the standard application/x-www-form-urlencoded format标准。使用urllib.parse.urlencode()可以将自定义的data转换为标准格式,而这个函数能接收的参数类型是Python中的mapping类型(键值对类型,比如dict)或者是只包含两个元素的元组类型。

  • data默认为None,此时是以GET方式发送请求,当用户设置data参数时,需要将发送请求的方式改为POST。

(3)timeout:可选参数,该参数用于设置超时时间,单位是秒。

(4)cafile/capath/ cadefault: 用于实现可信任的CA证书的HTTPS请求,这些参数很少使用。

(5)context:实现SSL加密传输,该参数很少使用。

下面是data和timeout参数的使用示例,具体如下:

data参数的使用:

import urllib.request
import urllib.parse
data = bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8'))
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

timeout参数的使用:

import urllib.request
import urllib.parse
response = urllib.request.urlopen('http://httpbin.org/get', timeout=1)
print(response.read())
点击此处
隐藏目录