requests模块的基本用法
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。
requests的功能和urllib基本相同,主要是向网站发送和接受数据。与urllib相比的话,requests更加的方便。
1. HTTP中的各种请求方式
- GET: 请求指定的页面信息,并返回实体主体。
- HEAD: 只请求页面的首部。
- POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
- PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE: 请求服务器删除指定的页面。
其中GET和POST请求比较常见,GET请求将提交的数据放置在HTTP请求协议头中,POST提交的数据则会放在实体数据中。
2. GET请求
GET- 从指定的资源请求数据
基本实现方法:导入requests库,用
requests.get(url, params)
方法向指定的URL发送GET请求,然后我们可以用text
属性将响应内容以文本的方式输出1
2
3
4
5import requests #导入requests库
url = 'http://www.baidu.com' #要请求的URL
response = requests.get(url) #发起GET请求,并获取响应
print(response.text) #以文本的方式输出响应内容,即页面源代码GET参数传递:GET方式提交的参数直接包含在URL中,我们可以通过直接构造或修改URL中的参数。但requests库提供了更加方便和人性化的
params
属性来允许我们传递请求参数。1
2
3
4
5
6
7
8
9#直接在URL中构造GET参数并请求
url1 = 'http://www.xxx.com/?id=1&user=admin'
response1 = requests.get(url1)
#利用params构造GET参数并请求
url2 = 'http://www.xxx.com/'
data = {'id':1,
'user':'admin'}
response2 = requests.get(url2, params=data)编码解码:在获取响应文本时如果未设置编码或编码设置不正确,可能会出现中文乱码,这里可以用
response.encoding
属性设置编码1
2
3response = requests.get(url, params)
response.encoding = 'utf-8' #设置编码方式为UTF-8
print(response.text)当返回二进制内容时,可以用
response.content.decode()
方法把二进制字节流转化为对应的str类型返回二进制数据:之前我们用
text
属性返回了文本信息,但如果想获取图片、音乐、视频等文件,就需要用content
属性来获取二进制数据1
2response = requests.get(url, params)
print(response.content) #返回二进制数据添加headers请求头:headers代表请求头,一些网站有反爬机制会检测请求头,如果发现是python自带的请求头可能就不会返回信息。因此我们要手动构造并添加
headers
属性,把请求头伪装成网站允许的请求头。1
2header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64;rv:46.0) Gecko/20100101 Firefox/46.0'}
response = requests.get(url, headers=header)
3. POST请求
POST-向指定的资源提交要被处理的数据
基本实现方法:和GET请求方法类似,可以用requests.post(url, data)
来发送POST请求
1 | import requests |
4. 获取响应
在上面的例子中我们使用text
和content
属性获取了响应的文本内容和二进制数据,除此之外还有很多属性和方法来获取其他信息,如状态码、响应头、Cookie等。
状态码:用status_code
获取状态码
1 | print(response.status_code) |
响应头:用headers
获取响应头
1 | print(response.headers) |
Cookie:用cookies
获取Cookie信息
1 | print(response.cookies) |
5. 发送Cookie
Cookie可以简单理解为一种登陆凭证,上面介绍了如何获取响应中的Cookie信息,这里简单说一下如何发送Cookie
基本实现方法:抓包可以看到Cookie信息是添加在请求头里向网站服务器发送的,于是在requests中我们可以在请求头headers
中添加Cookie的键值对来达到发送Cookie的目的
1 | header = {'key1':'value1', |
6. 会话维持
python每次对一个url的请求都相当与打开一个新的浏览器对网站进行请求,这样使我们的会话无法维持,虽然可以通过Cookie来登录,但是这样显得有些麻烦,在requests中我们可以通过Session()
方法来维持会话,简单暴力高效
1 | import requests |
7. 代理设置
当对网站频繁访问时,我们容易被ban,ip遭到封禁,导致我们在一段时间内无法访问。
为了防止我们自己的ip被ban,我们可以使用代理ip,就算封也是封的代理ip,我们只需要换一个代理ip就可以了。在requests中我们可以使用proxies
参数来设置。
1 | import requests |
8. 超时设置
为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数。
在默认情况下,除非指定了 timeout 值,requests 是不会自动进行超时处理的。如果没有 timeout,你的代码可能会挂起若干分钟甚至更长时间。
1 | response = requests.get(url, timeout=2) #设置超时时间为2秒 |
请求实际上分为两个过程:连接和读取,上例这样设置的timeout指的是连接和读取两个过程的总时间。如果我们要分别设置,我们可以传入一个元组。
1 | response = requests.get(url, timeout=(1,2)) #设置超时时间连接为1秒,读取为2秒 |
- 本文作者: Squidward
- 本文链接: http://www.squidward.xyz/2020/11/25/Python-requests模块简单学习/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!