Python爬虫之requests基础用法详解
作者:ZhiHuaWei
这篇文章主要介绍了Python爬虫之requests基础用法详解,虽然Python的标准库中urllib模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太友好,而requests库使用更简洁方便,需要的朋友可以参考下
requests库介绍
虽然Python的标准库中urllib模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太友好,而requests库宣传是“HTTP for Human”,说明使用更简洁方便。由于requests库不是标准库,所以我们首先需要安装这个requests库。
requests的安装和文档地址
利用 pip 命令可以非常方便您的安装:
pip install requests
中文文档:https://2.python-requests.org//zh_CN/latest/index.html
发送get请求
发送GET请求,直接调用requests.get()
就可以了,想要发送什么类型的请求,就调用什么方法。
代码示例:
# 引入requests库 import requests # 向指定的url发送请求,并返回 url = 'https://www.baidu.com/' # 发送get请求 req = requests.get(url=url) # 响应内容 print('状态码:', req.status_code) print('请求地址:', req.url) print('当前编码:', req.encoding) # req.encoding = 'utf-8' # 设置编码 # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码 print('内容1:', req.text) # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和deflate 压缩。 print('内容2:', req.content) # print('内容2:', req.content.decode()) # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None print('headers:', req.headers) # 返回原始响应体,也就是 urllib 的 response 对象,使用 使用 r.raw.read() print('原始响应体:', req.raw) # print(req.raw.read())
发送post请求
发送POST请求也是非常简单,直接调用requests.post()
就可以了;如果返回的是json数据,那么可以使用response.json()
来将json字符串转换为字典或者列表。
代码示例:
# 引入requests库 import requests # 声明定义请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36', } # 请求地址 post_url = 'https://fanyi.baidu.com/sug' # 参数 form_data = { 'kw': 'honey' } # 进行post请求 req = requests.post(url=post_url, data=form_data, headers=headers) # 响应内容 print('状态码:', req.status_code) print('请求地址:', req.url) print('当前编码:', req.encoding) # req.encoding = 'utf-8' # 设置编码 # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码 print('内容1:', req.text) # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和deflate 压缩。 print('内容2:', req.content) # print('内容2:', req.content.decode()) # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None print('headers:', req.headers) # 返回原始响应体,也就是 urllib 的 response 对象,使用 使用 r.raw.read() print('原始响应体:', req.raw) # print(req.raw.read()) # 返回json对象 print('json:', req.json())
requests异常处理
我们在实际使用过程中,可能会遇到网络的各种变化会导致请求过程发生各种未知的错误导致程序中断,这就使我们的程序不能很好的去处理错误。所以为了使我们的程序在请求时遇到错误,可以捕获这种错误,就要用到try…except
方法,以及了解requests可能发生的各种错误。
import requests url = 'http://www.b.com' try: req = requests.get(url=url) print(req.text) except requests.exceptions.ConnectionError as e: print(e) except requests.exceptions.ChunkedEncodingError as e: print(e) except requests.exceptions.HTTPError as e: print(e)
response的一些属性
上面的代码例子中已经有说明,在此再列举一遍。
# 响应内容 print('状态码:', req.status_code) print('请求地址:', req.url) print('当前编码:', req.encoding) # req.encoding = 'utf-8' # 设置编码 # 以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码 print('内容1:', req.text) # 以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和deflate 压缩。 print('内容2:', req.content) # print('内容2:', req.content.decode()) # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None print('headers:', req.headers) # 返回原始响应体,也就是 urllib 的 response 对象,使用 使用 r.raw.read() print('原始响应体:', req.raw) # print(req.raw.read()) # 获取返回的json数据 print('json:', req.json())
- response.content:这个是直接从网络上面抓取的数据,没有经过任何解码,所以是一个butes类型,其实在硬盘上和网络上传输的字符串都是bytes类型。
- response.text:这个是string的数据类型,是requests库将response.content进行解码的字符串,解码需要指定一个编码方式,requests回根据自己的请求来判断解码方式,所以有时候可能会由于解码方式不同产生乱码,这时候就应该使用response.content.decode('utf-8')继续手动解码。
到此这篇关于Python爬虫之requests基础用法详解的文章就介绍到这了,更多相关Python的requests基础用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!