request库通俗的讲就是一个可以自动提交网络请求的API,掌握定向网络数据爬取和网页解析的基本能力。
以下是该API一些常用的方法
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post(向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put(向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
以get为例子
当我们输入一个URL并且调用get方法后,它会根据你的URL找到对应的服务器以及请求文件所在的目录,然后返回一个包含服务器资源的response对象。
import requests
url = "http://www.baidu.com"
r = requests.get(url)//这里的r就是response对象
我们可以与浏览器作对比,当在浏览器上输入URL后,浏览器会发生什么变化呢?(以一个简单的只包含文字的网页为例子)
response对象其实就类似服务器发给浏览器的响应头
所以我们也可以从response对象中得到一些信息。
可以从response对象中得到返回的状态,当状态为200时,进而可以得到HTTP响应的字符串形式或者二进制形式(非文字类),以及两种猜测的编码方式。
如下:
这就不得不提到python的异常处理功能,那么requests有如下异常:
最常用的就是connectionerror和timeout和httperror,依次由于多次访问某个网站会被拒绝访问,网络问题导致的超时,状态码不是200造成的。
这时再引入一个方法,可以直接判断状态是不是200,不需要写if语句来判断。
r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要
增加额外的if语句,该语句便于利用try‐except进行异常处理,如果不是200直接抛出HttpError异常
HEAD: 只请求页面的首部。
GET: 请求指定的页面信息,并返回实体主体。
POST: 请求服务器接受所指定的文档作为对所标识的URL的新的从属实体。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。
(2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。