爬虫与Python:(三)基本库的使用——3.网络请求库之request使用介绍

Python爬虫中,除了urlib()外,还有一个使用的比较多的HTTP请求库——requests。这个库也是常用于HTTP请求模块,它使用Python语言编写,可以方便的对网页进行爬取,是学习Python比较好的HTTP请求模块。

Python3中没有默认安装requests库,在前一篇文章中,已经介绍了requests的安装。其中,requests库的pip安装命令为 pip install requests

接下来,我们来看看requests库的7个主要方法,如下表所示:

方法 解释
requests.request() 构造一个请求,支持以下各种方法
requests.get() 获取HTML的主要方法
requests.head() 获取HTML头部信息的主要方法
requests.post() 向HTML网页提交POST请求的方法
requests.put() 向HTML网页提交PUT请求的方法
request.patch() 向HTML提交局部修改请求
request.delete() 向HTML提交删除请求

1. requests.get()

requests.get()方法时常用方法之一,用户获取HTML。我们可以通过该方法链接其他方法,格式如下:

1 res = requests.get(url , params ,**kwargs)

参数说明见下表:

参数 描述
url 需要爬取的网站地址
params URL中的额外参数,字典或字节流格式,为可选参数。
**kwargs
控制访问参数,具体详见下表。
**Kwargs的参数
参数名称 描述
params 字典或字节列,作为参数增加到url中,使用这个参数可以把一些键值对以?key=value1&key2=value2的模式增加到url中。
data 字典、列表或元组的字节的文件,作用是向服务器提交资源,作为requests的内容。与params不同的是,data提交的数据并不放在URL链接中,而是放在URL链接对应位置的地方作为数据存储。它也可以接受一个字符串对象。
json

JSON格式的数据,json是HTTP中经常使用的数据格式,作为内容部分可以向服务器提交。例如:

1 kv= {'key1':'value1'}
2 r = requests.request('POST',"http://python123.io/ws",json=kv)
headers

 字典是HTTP的相关语,对应了向某URL访问时发起的HTTP的头字段,可以用字段来定义HTTP访问的HTTP头,可以用来模拟任何想模拟的浏览器对URL发起访问。例如:

1 hd = {'user-agent':'Chrome/10'}
2 r = requests.requests('POST','http://python123.io/ws',headers=hd)
cookies  字典或CookieJar,指的是从HTTP中解析Cookie。
auth  元组,用来支持HTTP认证功能
files

 字典,是用来向服务器传输文件时使用的字段。例如

 fs = {'files':open('data.txt','rb')} 

timeout  用于设定超时时间,单位为秒,当发起一个GET请求时可以设置一个timeout时间,如果timeout时间内请求内容没有返回,将产生一个timeout的异常。
proxies  字典,用来设置访问代理服务器。
allow_redirects  开关,表示是否允许对URL进行重定向,默认为True
stream  开关,指是否对获取内容进行立即下载,默认为True。
verify  开关,用于认证SSL证书,默认为True。
cert  用于设置保存本地SSL证书路径。

 前面的示例代码是构造一个服务器请求requests,返回一个包含服务器资源的Response对象。其中Request对象有以下属性,如表3-3所示。

Response对象的属性
属性 说明
status_code HTTP请求的返回状态,若为200表示请求成功
text HTTP响应内容的字符串形式,即返回的页面内容
encoding 从HTTP header中猜测的相应内容编码方式
apparent_encoding 从内容中分析
content  HTTP响应内容的二进制形式

 示例代码如下:

1 import  requests
2 
3 url = 'https://www.baidu.com/'4 r = requests.get(url)
5 print(r.status_code)
6 print(r.encoding)
7 print(r.apparent_encoding)
8 print(r.text)

运行结果如下图:

 

2.requests库的异常

requests库有时会产生异常,如网络连接错误、HTTP错误异常、重定向异常、请求URL超时异常等。这里可以利用r.raise_for_status()语句来捕捉异常,该语句在方法内部判断r.status_code是否等于200,如果不等于,则抛出异常,示例代码如下。

 1 import requests
 2 
 3 url = 'https://www.baidu.com/' 
4
try: 5 r = requests.get(url , timeout=30) # 请求超时时间为30s 6 r.raise_for_status() # 如果状态不是200则引发异常 7 r.encoding = r.apparent_encoding # 配置编码 8 print(r.text) 9 print(1) 10 except: 11 print("产生异常")

3. requests.head()

通过requests.head()方法,可以获取地址的header头部信息,示例代码如下:

1 import requests
2 
3 url = 'https://www.baidu.com/'4 r = requests.head(url)
5 print(r.headers)

4. requests.post()

requests.post()反复一般用于表单提交,向指定URL提交数据,可提交字符串、字典、文件等数据,示例代码如下:

 1 import  requests
 2 
 3 # 向url post 一个字典
 4 payload = {"key1":"value1","key2":"value2"}
 5 r = requests.post("http://httpbin.org/post",data=payload) # 这里的url 并非真实的请求
 6 print(r.text)
 7 
 8 # 向url post 一个字符串,自动编码为data
 9 r = requests.post("http://httpbin.org/post",data="hello") # 这里的url 并非真实的请求
10 print(r.text)

5. requests.put()和requests.patch()

requests。patch()和reques.put()类似,两者不同的是:当patch时,仅需提交修改的字段,但put时,必须将20个字段一起提交到URL,未提交的字段将会删除;patch的优点是节省网络带宽,示例代码如下:

 1 import  requests
 2 
 3 # requests.put
 4 payload = {"key1":"value1","key2":"value2"}
 5 r = requests.put("http://httpbin.org/put",data=payload) # 这里的url 并非真实的请求
 6 print(r.text)
 7 
 8 # requests.post
 9 payload = {"key1":"value1","key2":"value2"}
10 r = requests.patch("http://httWpbin.org/patch",data=payload) # 这里的url 并非真实的请求
11 print(r.text)
posted @ 2021-10-16 15:57  陆陆无为而治者  阅读(489)  评论(0编辑  收藏  举报