为了账号安全,请及时绑定邮箱和手机立即绑定

Python中的requests库入门教程

标签:
Python 爬虫 API
介绍requests库

requests库的作用和优势

requests库是Python中最常用的HTTP客户端库之一。它允许开发者通过简单的API发送HTTP请求,并处理响应。requests库的优点包括:

  1. 简洁的API: requests库的API设计简洁直观,易于理解和使用。
  2. 强大的功能: 它支持HTTP的各种功能,包括GET、POST等多种请求方法。
  3. 支持认证: 支持多种认证方式,如Basic Auth、Digest Auth、OAuth 1.0a、OAuth 2.0等。
  4. 自动解码: 自动解码响应的编码,可以处理多种字符编码。
  5. 支持流式下载: 可以处理大文件的下载和上传,支持流式下载。
  6. 支持SSL: 支持SSL连接,确保通信的安全性。
  7. 支持Cookies: 可以处理Cookies,包括读取和设置Cookies。
  8. 支持Session对象: 可通过Session对象持久化参数、Headers和Cookies等,简化HTTP会话管理。

安装requests库的方法

安装requests库非常简单,可以通过pip工具安装。在命令行中输入以下命令即可完成安装:

pip install requests

安装完成后,就可以在Python代码中导入并使用requests库了。

基本的GET请求

发送GET请求的基础语法

使用requests库发送GET请求的基本语法如下:

import requests

response = requests.get('https://api.example.com/data')

这段代码将向https://api.example.com/data发送一个GET请求,并将响应存储在变量response中。

获取响应内容和状态码的方法

requests库提供的响应对象拥有丰富的属性和方法,可以用来获取各种响应信息。下面是几个常用的属性和方法:

  • response.text: 获取响应的文本内容。
  • response.json(): 将响应内容解析为JSON对象。
  • response.status_code: 获取响应的状态码。
  • response.headers: 获取响应头信息。

下面是一个简单的示例代码,展示了如何获取响应内容和状态码:

import requests

response = requests.get('https://api.example.com/data')
print("响应内容:", response.text)
print("状态码:", response.status_code)
print("响应头:", response.headers)

这段代码首先发送GET请求,然后打印响应内容、状态码和响应头信息。

基本的POST请求

发送POST请求的基础语法

使用requests库发送POST请求的基本语法如下:

import requests

response = requests.post('https://api.example.com/data', data={'key': 'value'})

这段代码将向https://api.example.com/data发送一个POST请求,并将数据{"key": "value"}作为请求体发送。

传递表单数据和JSON数据

requests库支持通过data参数传递表单数据,或通过json参数传递JSON数据。下面分别展示了两种方式的示例代码。

传递表单数据

import requests

response = requests.post('https://api.example.com/data', data={'key': 'value'})
print("状态码:", response.status_code)

这段代码发送一个POST请求,传递了表单数据{"key": "value"},并打印响应的状态码。

传递JSON数据

import requests

response = requests.post('https://api.example.com/data', json={'key': 'value'})
print("状态码:", response.status_code)

这段代码发送一个POST请求,传递了一个JSON对象{"key": "value"},并打印响应的状态码。

文件上传示例

import requests

files = {'file': open('report.xls', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)
print("状态码:", response.status_code)

这段代码发送一个POST请求,附带一个文件上传。report.xls文件将作为文件字段file上传。

处理请求参数

URL参数的传递方法

在URL中传递参数有多种方式。一种是在URL字符串中直接拼接参数,另一种是使用requests库提供的params参数。

直接拼接URL

import requests

response = requests.get('https://api.example.com/data?key=value')
print("状态码:", response.status_code)

这段代码直接在URL中拼接了查询参数key=value,并发送GET请求。

使用params参数

import requests

params = {'key': 'value'}
response = requests.get('https://api.example.com/data', params=params)
print("状态码:", response.status_code)

这段代码通过params参数传递查询参数,并发送GET请求。

使用params参数进行参数传递

params参数可以是一个字典或列表。下面是一个使用字典传递参数的示例:

import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com/data', params=params)
print("状态码:", response.status_code)
print("URL参数:", response.request.url)

这段代码通过params参数传递了多个查询参数,并发送GET请求。response.request.url展示了经过URL编码后的完整请求URL。

使用headers和cookies

设置请求头的方法

requests库可以通过headers参数设置请求头。下面是几个常见的请求头设置示例:

import requests

headers = {'User-Agent': 'My User Agent 1.0'}
response = requests.get('https://api.example.com/data', headers=headers)
print("状态码:", response.status_code)

这段代码设置了User-Agent请求头,并发送GET请求。

处理Cookies的方法

requests库可以通过cookies参数传递Cookies,也可以通过响应对象获取Cookies。下面是几个示例代码:

设置Cookies

import requests

cookies = {'cookie1': 'value1', 'cookie2': 'value2'}
response = requests.get('https://api.example.com/data', cookies=cookies)
print("状态码:", response.status_code)

这段代码设置了多个Cookies,并发送GET请求。

获取Cookies

import requests

response = requests.get('https://api.example.com/data')
print("Cookies:", response.cookies)

这段代码发送GET请求,并打印获取到的Cookies。

使用Session对象持久化会话

import requests

s = requests.Session()
s.headers.update({'User-Agent': 'My User Agent 1.0'})
response = s.get('https://api.example.com/data')
print("状态码:", response.status_code)
print("Cookies:", response.cookies)

这段代码使用requests.Session对象来持久化用户会话,设置请求头,并发送GET请求。

错误处理和异常捕获

常见错误类型及解决方法

使用requests库时可能会遇到多种错误类型,常见的有:

  • requests.exceptions.RequestException: 基础请求错误,可以捕获其他所有异常。
  • requests.exceptions.HTTPError: HTTP错误,比如404、500等状态码。
  • requests.exceptions.ConnectionError: 连接错误,比如超时、DNS错误等。
  • requests.exceptions.Timeout: 超时错误。

下面是一个捕获ConnectionError的示例代码:

import requests
from requests.exceptions import ConnectionError

try:
    response = requests.get('https://api.example.com/data')
except ConnectionError as e:
    print("请求失败,原因:", str(e))

这段代码尝试发送GET请求,并捕获ConnectionError异常。

使用try-except进行异常处理

使用try-except结构可以捕获并处理各种异常情况。下面是一个完整的示例代码,展示了如何捕获常见的请求异常:

import requests
from requests.exceptions import RequestException, HTTPError, ConnectionError, Timeout

try:
    response = requests.get('https://api.example.com/data', timeout=5)  # 设置超时时间为5秒
    response.raise_for_status()  # 如果响应状态码不是200,将抛出HTTPError异常
except RequestException as e:
    print("请求失败,原因:", str(e))
except HTTPError as e:
    print("HTTP错误,原因:", str(e))
except ConnectionError as e:
    print("连接错误,原因:", str(e))
except Timeout as e:
    print("超时错误,原因:", str(e))

这段代码捕获了各种常见的请求异常,并打印相应的错误信息。raise_for_status()方法用于检查响应状态码,如果状态码不为200,将抛出一个HTTPError异常。此外,通过设置timeout参数,可以指定请求超时时间,当请求超过指定时间未完成时将抛出Timeout异常。

实践示例

示例:发送一个GET请求

import requests

response = requests.get('https://api.example.com/data')
print("状态码:", response.status_code)
print("响应内容:", response.text)

这段代码发送一个GET请求,并打印响应的状态码和内容。

示例:发送一个POST请求

import requests

response = requests.post('https://api.example.com/data', json={'key': 'value'})
print("状态码:", response.status_code)

这段代码发送一个POST请求,并打印响应的状态码。

示例:处理请求参数

import requests
from urllib.parse import urlencode

params = {'key': 'value'}
encoded_params = urlencode(params)
response = requests.get(f'https://api.example.com/data?{encoded_params}')
print("状态码:", response.status_code)
print("URL参数:", response.request.url)

这段代码使用urlencode函数构建参数,并发送带有查询字符串的GET请求。

示例:处理请求头和Cookies

import requests

headers = {'User-Agent': 'My User Agent 1.0'}
cookies = {'cookie1': 'value1', 'cookie2': 'value2'}
response = requests.get('https://api.example.com/data', headers=headers, cookies=cookies)
print("状态码:", response.status_code)
print("请求头:", headers)
print("Cookies:", response.cookies)

这段代码设置请求头和Cookies,并发送GET请求。

示例:错误处理和异常捕获

import requests
from requests.exceptions import RequestException, HTTPError, ConnectionError, Timeout

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    response.raise_for_status()  # 如果响应状态码不是200,将抛出HTTPError异常
except RequestException as e:
    print("请求失败,原因:", str(e))
except HTTPError as e:
    print("HTTP错误,原因:", str(e))
except ConnectionError as e:
    print("连接错误,原因:", str(e))
except Timeout as e:
    print("超时错误,原因:", str(e))

这段代码捕获了各种请求异常,并打印相应的错误信息。通过设置超时时间,可以有效避免请求长时间等待导致的超时问题。

以上是Python中requests库的入门教程,通过这些示例代码和讲解,希望能够帮助您更好地理解和使用这个强大的HTTP客户端库。对于更深入的学习,建议参考requests库的官方文档,并在实际项目中不断实践。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消