Python中实现HTTP网络请求常见的3种方式为:urlib,urllib3和requests。下面将一一进行介绍
1.urllib模块
urllib是Python自带模块,该模块中提供了一个urlopen()方法,通过该方法指定URL发送网络请求来获取数据。urllib提供了多个子模块,具体的模块名称与含义如下:
模块名称 | 描述 |
urllib.request | 该模块定义了打开url(主要是HTTP)的方法和类,如身份验证、重定向、cookie等 |
urllib.error | 该模块主要包含异常类,基本的异常类是urlerror |
urllib.parse | 该模块定义的功能分为两大类:URL解析和URL引用 |
urllib.robotparser | 该模块用于解析robots.txt文件 |
通过urllib.request模块实现发送请求并读取网页内容的简单实例如下:
上面的实例中,是通过get请求方式获取百度的网页内容。下面通哪个更使用urllib.request模块的post请求实现 获取网页信息的内容,实例如下:
这里通过http://httpbin.org/posr网站进行演示,该网站可以作为联系使用urllib的一个站点使用,可以模拟各种请求操作。
2.urllib3模块
urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.urllib3提供了很多Python标准库里没有的重要特性:
(1)线程安全
(2)连接池
(3)客户端ssl/TLS验证
(4)使用多部分编码上传文件。
(5)Helpers用于充实请求并处理HTTP重定向
(6)支持gzip和deflate编码
(7)支持HTTP和socks代理
(8)100%的测试覆盖率
通过urllib3模块实现发送网络请求的实例代码如下:
post请求实现获取网页信息的内容,代码如下:
3.requests模块
requests是Python中实现HTTP请求的一种方式,reques是第三方模块,该模块在实现HTTP请求是要比urllib模块简化很多,操作更加人性化。在使用reques模块时需要执行pip install requests代码进行该模块的安装。requests功能那个特性如下。
(1)Keep-Alive &连接池
(2)国际化域名和url
(3)带持久Cookie的会话
(4)浏览器 式的SSL认证
(5)自动内容解码
(6)基本/摘要式的身份认证
(7)优雅的key/value Cookie
(8)自动解压
(9)Unicode响应体
(10)HTTP(S)代理支持
(11)文件分块上传
(12)流下载
(13)连接超时
(14)分块请求
(15)支持.netrc
以GET请求方式为例,打印多种请求信息的实例代码如下:
以post请求方式,发送HTTP网络请求的实例代码:
requests模块不仅提供了以上 两种常用请求方式,还提供一下多种网络请求方式。代码如下:
requests.put('http://httpbin.org/put',data={'key':'value'}) #put请求
requests.delete('http://httpbin.org/delete') #delete请求
requests.head('http://httpbin.org/get') #head请求
requests.options('http://httpbin.org/get') #option请求
如果发现请求的url地址中参数是在“?(问号)”的后面,例如,httpbin.org/get?key=val.requests模块提供了传递参数的方法,允许用户使用params关键字参数,以一个字符串字典来提供这些参数。例如,用户想传递key1=value1和key2=value2到httpbin.org/get,那么可以使用以下代码
import requests
payload={'key1':'value1','key2':'value2'} #传递的参数
#对需要爬取的网页发送请求
response=requests.get("http://httpbin.org/get",params=payload)
print(response.content) #以字节流形式打印网页源码
标签:常用,HTTP,请求,爬虫,urllib,网络,模块,httpbin,requests From: https://blog.51cto.com/u_15888443/5881352