3.2 使用urlopen()方法发送请求
urllib.request模块提供了urlopen()方法,用于实现最基本的HTTP请求,然后接收服务端所返回的响应数据。urlopen()方法的语法格式如下:
urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)
参数说明如下。
url:需要访问网站的URL完整地址。
data:该参数默认值为None,通过该参数确认请求方式,如果是None,那么表示请求方式为GET,否则请求方式为POST。在发送POST请求时,参数data需要以字典形式的数据作为参数值,并且需要将字典类型的参数值转换为字节类型的数据才可以实现POST请求。
timeout:以秒为单位,设置超时。
cafile、capath:指定一组HTTPS请求受信任的CA证书,cafile指定包含CA证书的单个文件,capath指定证书文件的目录。
cadefault:CA证书默认值。
context:描述SSL选项的实例。
3.2.1 发送GET请求
在使用urlopen()方法实现一个网络请求时,所返回的是一个http.client.HTTPResponse对象。示例代码如下:
程序运行结果如下:
响应数据类型为: <class 'http.client.HTTPResponse'>
【例3.1】 演示常用的方法与属性。(实例位置:资源包\Code\03\01)
在HTTPResponse对象中包含着需要可以获取信息的方法以及属性,下面通过几个常用的方法与属性进行演示。代码如下:
程序运行结果如图3.1所示。
图3.1 程序运行结果
3.2.2 发送POST请求
【例3.2】 发送POST请求。(实例位置:资源包\Code\03\02)
urlopen()方法在默认情况下发送的是GET请求,在发送POST请求时,需要为其设置data参数,该参数是bytes类型,所以需要使用bytes()方法将参数值进行数据类型的转换。示例代码如下:
程序运行结果如图3.2所示。
图3.2 POST请求结果
3.2.3 设置网络超时
urlopen()方法中的timeout参数,是用于设置请求超时的参数,该参数以秒为单位,表示如果在请求时,超出了设置的时间,还没有得到响应时就抛出异常。示例代码如下:
由于以上示例代码中的超时时间设置为0.1秒,时间较快,所以将显示如图3.3所示的超时异常。
图3.3 请求超时异常信息
说明
根据网络环境的不同,可以将超时时间设置为一个合理的时间,如2秒、3秒等。
【例3.3】 处理网络超时。(实例位置:资源包\Code\03\03)
如果遇到了超时异常,爬虫程序将在此处停止。所以在实际开发中开发者可以将超时异常捕获,然后处理下面的爬虫任务。示例代码如下:
程序运行结果如下:
当前任务已超时,即将执行下一任务!