我们已经讲解了Python内置的 urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。
更好的方案是使用requests
。它是一个Python第三方库,处理URL资源特别方便。
安装requests
如果安装了Anaconda,requests
就已经可用了。否则,需要在命令行下通过pip安装:
如果遇到Permission denied安装失败,请加上sudo重试。
使用requests
要通过GET访问一个页面,只需要几行代码:
对于带参数的URL,传入一个dict
作为params
参数:
requests自动检测编码,可以使用encoding
属性查看:
无论响应是文本还是二进制内容,我们都可以用content
属性获得bytes
对象:
requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取:
需要传入HTTP Header时,我们传入一个dict
作为headers
参数:
要发送POST请求,只需要把get()
方法变成post()
,然后传入data
参数作为POST请求的数据:
requests
默认使用application/x-www-form-urlencoded
对POST数据编码。如果要传递JSON数据,可以直接传入json参数:
类似的,上传文件需要更复杂的编码格式,但是requests
把它简化成files
参数:
在读取文件时,注意务必使用'rb'
即二进制模式读取,这样获取的bytes
长度才是文件的长度。
把post()
方法替换为put()
,delete()
等,就可以以PUT或DELETE方式请求资源。
除了能轻松获取响应内容外,requests
对获取HTTP响应的其他信息也非常简单。例如,获取响应头:
requests
对Cookie做了特殊处理,使得我们不必解析Cookie就可以轻松获取指定的Cookie:
要在请求中传入Cookie,只需准备一个dict
传入cookies
参数:
最后,要指定超时,传入以秒为单位的timeout参数:
小结
用requests获取URL资源,就是这么简单!