目录
简介
requests库是一个第三方库,主要用于爬虫请求
作用和python自带urllib库类似,用于请求目标地址数据,更加方便
本文档内容以入门、实用、查漏补缺为主,避免过于全面造成冗长
从小实例入手:
import requests
headers = {'User-Agent': 'Mozilla/5.……'}
urls = 'http://www.baidu.com'
res = requests.get(url=urls, headers=headers, allow_redirects=False, timeout=10)
print(res.status_code)
html = res.text
print(type(html))
html = res.content
print(type(html))
下面来理解这个实例。
安装requests库
windows命令行下,按如下命令安装一次即可
pip install requests
导入requests库
import requests
目标请求
请求方法
get请求
例中使用的是最常用、最基础的get请求,目标地址的网页信息被赋给res对象。所以,请求的一切响应、结果都藏在res对象中。得到正确的结果,算是成功了一大步。
post请求
res = requests.post('http://httpbin.org/post', data = {'key':'value'})
post请求是第二常用请求,特点为带data关键信息。可理解为进屋敲门时自报家门,报错时,屋里的小羊自然不会为大灰狼开门。(对应get请求为开门就进,想拿什么拿什么)
其他请求
r = requests.put('http://httpbin.org/put', data = {'key':'value'})
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/get')
r = requests.options('http://httpbin.org/get')
上面是还未遇到过的各种请求,放此不表。
请求参数
url:目标地址字符串;
headers:请求头,字典形式。常规会放入一个或多个User-Agent,想通过代码爬虫至少要伪装成在操作系统中的浏览器在请求数据吧。
allow_redirects:允许_重定向,所以默认是True自动处理,但这样会得不到新的url。存在这种情况时,应改为False,通过302响应结果,找到新的url。关于重定向的细节说明
timeout:常用,该时间内等待响应,单位秒,超时停止请求。注意timeout仅指该时间内应答有反馈即可,非所有请求的数据下载至本地。可理解为服务器接电话即可,不管什么时候挂电话。
请求结果
各种请求结果的形式、内容非常丰富,只挑常用的说明。
状态码
Status Code代表请求过程的状态说明,数据类型是<class 'int'>,状态码主要用于在判定某一状态下,进行特定的程序处理。
常见如:200:正确响应;301:永久重定向;302:临时重定向;404:服务器无相关资源或无理由拒绝等。更多类型说明。
结果的数据形式
这是服务器反馈给我们的各种信息形式,爬的就是它们。常用的包括两种。
res.text:响应结果的字符串形式,便于后期通过正则等工具进行数据处理。
html = res.text
print(html)
print(type(html))
运行结果:
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
<class 'str'>
res.content:响应结果的字节形式。如果请求的地址是一个图片链接,就应以字节形式存储数据。如下结果中的b'……'内容。当然,实际内容长度会比下图长的多。
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00'
关于请求结果的编码问题
requests库根据请求返回的内容,自动判断选择一种解码方式来解码展现出来(数据传输的底层逻辑是1和0的形式,所以会有编码、解码过程)。可以查看解码的效果,如果发现有乱码,就需要指定其他的编码方式,常用的是utf-8。
看实例:
import requests
res = requests.get('http://www.baidu.com')
print(res.text) #requests库会自动对请求结果进行编码
print(res.encoding) #查看自动选择的编码方式
res.encoding = 'utf-8' #通过赋值指定编码方式utf-8
print(res.text) #查看指定编码后的解码效果
print(res.encoding) #查看指定的解码方式
分析过程:
第一个print(res.text),输出结果,显示有乱码,见下图。通过print(res.encoding)查看当前解码方式是ISO-8859-1。
通过指定为utf-8,重新查看解码结果正常无乱码,如图: