Python 中的 Requests 库如何使用?

requests 库是 Python 中一个非常流行且功能强大的用于发送 HTTP 请求的第三方库。它简化了与网页服务器交互的过程,能够让开发者可以轻松地获取网页内容、发送数据等操作,深受开发者欢迎!

 安装

使用 pip 命令就可以很方便地安装 requests 库。在命令行中执行:

pip install requests

等待安装完成即可。

HTTP 请求方法

GET

GET 请求是最常用的请求方式之一,主要用于从服务器获取数据。例如,获取一个网页的内容。

import requests
url = "https://upkg.cn/113.html"
response = requests.get(url)
print(response.text)

在这个示例中,我们首先导入 requests 库,然后定义了一个目标 url(这里以我博客文章为例)。通过 requests.get() 方法发送 GET 请求,服务器返回的响应存储在 response 对象中。response.text 属性可以获取响应的文本内容,一般用于获取 HTML 网页内容等情况。

POST

POST 请求通常用于向服务器提交数据,比如提交表单数据。

import requests
url = "https://upkg.cn/user/login"
data = {"username": "testuser", "password": "testpassword"}
response = requests.post(url, data = data)
print(response.status_code)

这里我们定义了一个 url 用于接收 POST 数据的端点,data 是一个字典,包含了要提交的用户名和密码等信息。requests.post() 方法将数据发送到服务器,response.status_code 可以获取服务器返回的状态码,比如 200 表示请求成功。

PUT 及 DELETE

PUT 请求用于更新服务器上的资源,DELETE 请求用于删除服务器上的资源。它们的使用方式和 POST、GET 类似。

例如,使用 PUT 请求更新一个资源:

import requests
url = "https://upkg.cn/update-resource"
data = {"new_value": "updated_data"}
response = requests.put(url, data = data)
print(response.text)

DELETE 请求

import requests
url = "https://upkg.cn/delete_resource"
response = requests.delete(url)
print(response.status_code)

请求参数

URL 参数(query string)

对于 GET 请求,我们可以在url中添加参数。例如,搜索一个产品的 API,可能需要传递关键词作为参数。

import requests
base_url = "https://upkg.cn/search"
params = {"keyword": "upackage"}
response = requests.get(base_url, params = params)
print(response.url)
print(response.text)

在这个例子中,params 是一个字典,包含了要传递的参数。requests.get() 方法会自动将参数添加到 url 后面,形成完整的请求 url,如 https://upkg.cn/search?keyword=upackage,然后发送请求并获取响应。

请求头(Headers)

请求头包含了关于请求的一些元信息,比如用户代理(User-Agent)、内容类型(Content-Type)等。有时候服务器会根据请求头来判断请求是否合法或者提供不同的内容。

import requests
url = "https://upkg.cn"
headers = {"User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}
response = requests.get(url, headers = headers)
print(response.text)

这里我们定义了一个常见的用户代理头,模拟浏览器发送请求。这在一些需要绕过服务器对爬虫的简单限制(如检查用户代理是否是浏览器)时很有用。

Cookies

Cookies 是服务器发送给客户端(浏览器),并且客户端后续请求会带上的一小段文本信息。requests库可以很方便地处理 Cookies。

import requests
url = "https://www.upkg.cn"
response = requests.get(url)
cookies = response.cookies
# 下一次请求中带上上面获取的cookies
new_url = "https://www.upkg.cn/otherpage"
new_response = requests.get(new_url, cookies = cookies)
print(new_response.text)

首先获取初始请求返回的 cookies,然后在后续的请求中通过 cookies 参数带上这些 cookies,就像在浏览器中一样,保持会话状态。

响应处理

状态码(Status Code)

状态码表示服务器对请求的响应状态。常见的状态码有 200(成功)、404(未找到资源)、500(服务器内部错误)等。

import requests
url = "https://upkg.cn"
response = requests.get(url)
if response.status_code == 200:
    print("请求成功")
elif response.status_code == 404:
    print("未找到资源")
else:
    print("其他状态码:", response.status_code)

通过检查 status_code,可以根据不同的情况来处理响应,比如重试请求或者记录错误。

响应内容类型(Content-Type)

响应内容类型可以通过 response.headers 中的 Content-Type 字段来查看。常见的内容类型有text/html(HTML 网页)、application/json(JSON 数据)等。

import requests
url = "https://upkg.cn/api"
response = requests.get(url)
content_type = response.headers.get("Content-Type")
if content_type == "application/json":
    json_data = response.json()
    print(json_data)
elif content_type == "text/html":
    print(response.text)
else:
    print("其他内容类型")

根据内容类型,可以使用不同的方法来处理响应内容。如果是application/json,可以使用response.json()方法来获取解析后的 JSON 数据;如果是text/html,可以使用response.text获取 HTML 文本。

响应内容的编码(Encoding)

response.encoding 属性可以获取响应内容的编码方式。有时候,服务器返回的编码可能和默认的编码不一致,需要手动设置。

import requests
url = "https://upkg.cn"
response = requests.get(url)
if response.encoding!= "utf-8":
    response.encoding = "utf-8"
print(response.text)

在这个例子中,如果响应的编码不是 utf-8,我们将其设置为 utf-8,这样可以正确地处理和显示响应内容。

异常处理

连接异常(ConnectionError)

当无法连接到服务器时,会抛出ConnectionError异常。这可能是因为网络问题、服务器不可用等原因。

import requests
url = "https://www.baidu.com"
try:
    response = requests.get(url)
    print(response.text)
except requests.ConnectionError as e:
    print("连接出错:", e)

通过 try-except 块来捕获连接异常,这样可以在出现问题时进行适当的处理,比如重试或者记录错误信息。

HTTP 异常(HTTPError)

当服务器返回的状态码表示错误(如4xx5xx系列状态码)时,会抛出 HTTPError 异常。不过,需要注意的是,requests 库默认情况下不会自动抛出这个异常,需要手动设置。

import requests
url = "https://www.baidu.com"
try:
    response = requests.get(url)
    response.raise_for_status()
    print(response.text)
except requests.HTTPError as e:
    print("HTTP错误:", e)

response.raise_for_status() 方法会检查状态码,如果状态码表示错误,就会抛出 HTTPError 异常,方便我们集中处理请求错误。

其他异常(如 Timeout )

还可能会遇到请求超时(Timeout)等异常情况。可以通过设置超时时间来控制请求等待的时长。

import requests
url = "https://upkg.cn"
try:
    response = requests.get(url, timeout = 5)
    print(response.text)
except requests.Timeout as e:
    print("请求超时:", e)

在这个例子中,设置了超时时间为 5 秒,如果请求在 5 秒内没有得到响应,就会抛出 Timeout 异常。

结语

以上就是对 Python 第三方库的 requests 的详细介绍和 Demo 啦,有什么不懂的可以在我博客评论区留言咨询哦,个人博客: 游包技术栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值