一、requests库的介绍和安装
requests是Python中的一个第三方库,它提供了一种简单而优雅的方式,比原生的HTTP请求方式更易于使用。requests是一个Python库,用于发送各种HTTP请求。requests库的安装可以通过pip命令进行,如果有不会下载安装的可以参考我的文章《Python第三方库安装详细教程(图文结合)》,安装代码如下:
pip install requests
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/
安装完成后,可以使用import引入requests模块进行使用。引入代码如下:
import requests
二、requests模块的基本使用
requests可以简单、直观地实现HTTP协议中的各种请求功能。下面简单介绍requests模块的基本使用。
1.发送GET请求
在Python中,使用requests发送GET请求非常简单,只需要调用requests模块中的get()函数,以百度首页为例,向百度发起了一个get请求,并返回响应内容,代码如下:
import requests # 引入第三方库
response = requests.get('https://www.baidu.com')
print(response.text) # 以文本形式打印响应的内容
2.带参数的GET请求
有时候需要在URL中加上一些参数来完善请求。requests提供了一种简单的方式,即使用params参数传递参数,代码如下:
import requests
url = 'https://www.baidu.com'
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get(url, params=params)
print(response.text)
3.发送POST请求
除了GET请求外,使用requests还可以发送POST请求。发送POST请求时需要设置data参数或json参数,代码如下:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.baidu.com', data=data)
print(response.text)
或者,使用json参数:
import requests
json = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.baidu.com', json=json)
print(response.json)
其中,data参数适用于传送表单数据,json参数适用于传送JSON格式的数据。
4.设置请求头信息
在很多情况中,我们都需要进行请求头伪装,需要在请求中添加一些HTTP头信息。设置一个user-agent的请求头来模拟浏览器请求的方式。使用requests时,只需要调用请求对象的headers属性即可添加请求头信息,代码如下:
import requests
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}
response = requests.get('https://www.baidu.com', headers=headers)
print(response.text)
如果未设置请求头信息,有的网站服务器收到的请求头信息是python-requests/2.28.2,服务器就会拒绝访问,程序抛出异常。
print(response.request.headers) # 查看服务器收到的请求头信息
# 输出的结果如下:
# {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
5.设置超时时间
有时候在发送请求时会出现等待过长的情况,需要设置超时时间。requests提供了timeout参数来设置超时时间,设置超时时间为3秒,如果超过3秒就会抛出异常。实现代码如下:
import requests
response = requests.get('https://www.baidu.com', timeout=3)
print(response.text)
三、requests模块进阶使用
1.带状态保持的请求
在实际开发中,我们常常需要在一个会话中保持状态。requests提供了session对象来实现带状态保持的请求,代码实现如下:
import requests
session = requests.Session()
session.get('https://www.baidu.com')
response = session.get('https://www.baidu.com/cookies')
print(response.text)
在上面这部分代码中,我们用session对象分别发送了两个请求。第一个请求是普通的GET请求,它会返回一些cookie信息,在第二个请求中我们传入了这些cookie信息,从而实现了带状态保持的请求。
2.文件上传
使用requests也可以实现文件上传功能。在构造POST请求时,我们可以使用files参数来上传文件:
import requests
files = {'file': open('test.txt', 'rb')}
response = requests.post('https://www.baidu.com', files=files)
print(response.text)
3.cookie操作
requests提供了对cookie的支持和操作。使用requests时,我们可以通过cookies属性获取响应中的cookie信息:
import requests
response = requests.get('https://www.baidu.com')
cookies = response.cookies
print(cookies)
通过cookies属性获取的cookie信息可以直接用于下一次请求中的cookies参数。
四、如何使用代理IP
在实际开发中,我们有时候需要使用代理服务器来发送HTTP请求。requests提供了一个proxies参数来实现代理设置,网上提供了很多免费的代理IP,如: https://www.kuaidaili.com/free/,打开如下图:
import requests
proxies = {
'http': 'http://60.167.20.232:1133',
'https': 'https://60.167.20.232:1133',
}
response = requests.get('https://www.baidu.com', proxies=proxies)
print(response.text)
在上面这部分代码中,设置了一个代理服务器,使用了proxies参数,将代理服务器的URL传递给了requests.get()函数。(代理有风险,请慎用)
五、requests模块的使用案例
利用模块requests和BeautifulSoup获取彼岸图网站的4K高清图片
import requests
from bs4 import BeautifulSoup
url = 'https://pic.netbian.com/4kyouxi/'
head = {
'users-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39'
}
response = requests.get(url = url, headers=head)
response.encoding = 'gbk'
# print(response.text)
print(response.status_code)
soup = BeautifulSoup(response.text,'html.parser')
# 定位到ul
img_url = soup.find('ul',attrs={"class":"clearfix"})
# print(img_url)
# 找到ul下的所有a标签内容,返回列表
a_href = img_url.find_all('a')
# print(a_href)
for href in a_href:
# 遍历列表,通过get来获取a标签下href属性值
img_href = 'https://pic.netbian.com' + href.get('href')
# print(img_href)
response2 = requests.get(url = img_href,headers=head)
response2.encoding = 'gbk'
soup2 = BeautifulSoup(response2.text,'html.parser')
photo_url = soup2.find('div',class_="photo-pic")
# print(photo_url)
# 遍历的url返回多个列表,取每个列表索引号为0的值
src_url = photo_url.find_all('img')[0]
# print(src_url)
new_src = 'https://pic.netbian.com'+ src_url.get('src')
img_name = new_src.split('/')[-1]
# print(new_src)
response3 = requests.get(new_src).content
with open('D:\\图片\\'+img_name,'wb')as file:
file.write(response3)
print("下载成功!")
break
总结
本篇文章介绍了requests模块的基本用法、进阶用法和一些实际案例。requests是Python中非常常用的HTTP请求模块,用途广泛,不仅可以用于爬虫,也可用于各种网络请求。学习使用requests模块对于Python网络爬虫的入门非常重要。
如果想要深入了解requests模块的更多用法,建议可以去查看它的官方文档,https://docs.python-requests.org/en/latest/ ,其中给出了更加详细的API。