Scrapy与分布式开发(2.1.1):python常用网络请求库requests

Python requests模块详细讲解

一、简介

requests是Python中一个非常流行且功能强大的HTTP客户端库。它允许你使用Python语言发送所有类型的HTTP请求,如GET、POST、PUT、DELETE等。requests模块基于urllib3开发,但比urllib3更加简单易用。它提供了丰富的API,使得发送HTTP请求和处理响应变得轻而易举。

二、安装

要使用requests模块,首先需要安装它。你可以使用pip命令进行安装:

pip install requests

三、基本用法

GET请求

import requests

response = requests.get('https://www.example.com')
print(response.text)  # 打印响应内容

POST请求

import requests

payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post', data=payload)
print(response.text)

其他请求方法

requests还支持PUT、DELETE、HEAD等HTTP方法。

response = requests.put('https://www.example.com/put', data=payload)
response = requests.delete('https://www.example.com/delete')
response = requests.head('https://www.example.com/head')

四、响应处理

状态码

print(response.status_code)  # 打印HTTP状态码

响应头

print(response.headers)  # 打印响应头信息

响应内容

print(response.text)  # 打印响应内容(字符串形式)
print(response.json())  # 如果响应内容是JSON格式,可以使用此方法解析
print(response.content)  # 打印响应内容(字节形式)

错误处理

如果请求发生错误,requests会抛出一个requests.exceptions.RequestException异常。你可以使用try-except语句来捕获这个异常。

try:
    response = requests.get('https://www.example.com/invalid')
    print(response.text)
except requests.exceptions.RequestException as err:
    print(err)

五、高级特性

参数传递

在GET请求中,你可以使用params参数来传递查询字符串。

payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://www.example.com/get', params=payload)
print(response.url)  # 打印完整的URL,包括查询字符串

自定义请求头

你可以使用headers参数为请求添加自定义的头部信息。

headers = {'User-Agent': 'my-app/0.0.1'}
response = requests.get('https://www.example.com', headers=headers)

文件上传

使用files参数可以上传文件。

files = {'file': open('path/to/file', 'rb')}
response = requests.post('https://www.example.com/upload', files=files)

认证

使用auth参数可以为请求添加HTTP认证。

from requests.auth import HTTPBasicAuth

response = requests.get('https://www.example.com', auth=HTTPBasicAuth('username', 'password'))

超时设置

使用timeout参数可以为请求设置超时时间。

response = requests.get('https://www.example.com', timeout=5)  # 超时时间为5秒

代理设置

使用proxies参数可以设置代理服务器。

proxies = {
    'http': 'http',
    'https': 'http',
}

response = requests.get('https://www.example.com', proxies=proxies)

Session对象

requests.Session对象允许你跨多个请求保持某些参数和cookies。这对于需要在多个请求之间保持状态的场景非常有用,如登录会话或API交互。

import requests

# 创建一个Session对象
s = requests.Session()

# 使用Session对象发送GET请求
response = s.get('https://www.example.com/login', auth=('user', 'pass'))

# 检查我们是否登录成功
print(response.text)

# 发送另一个请求,这个请求将携带上一次的cookies
response = s.get('https://www.example.com/user/profile')
print(response.text)

Cookies

requests库会自动处理cookies。当服务器在响应中设置cookies时,requests会在随后的请求中携带这些cookies。

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

# 获取cookies
cookies = response.cookies
print(cookies['cookie_name'])

# 发送带有特定cookies的请求
response = requests.get('https://www.example.com', cookies={'cookie_name': 'cookie_value'})

SSL证书验证

默认情况下,requests会对HTTPS请求进行SSL证书验证。如果你需要跳过证书验证(不推荐在生产环境中这样做),可以传递verify=False参数。

response = requests.get('https://www.example.com', verify=False)

异常处理

requests库定义了一些特定的异常,你可以使用它们来更好地处理请求过程中可能出现的错误。

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

try:
    response = requests.get('https://www.example.com')
    response.raise_for_status()  # 如果不是2xx响应则会抛出HTTPError异常
except RequestException as e:
    # 处理所有requests相关的异常
    print(e)
except HTTPError as e:
    # 处理HTTP错误
    print(e)
except ConnectionError as e:
    # 处理连接错误
    print(e)
except Timeout as e:
    # 处理超时错误
    print(e)
posted @ 2024-02-27 16:17  七夜魔手  阅读(7)  评论(0编辑  收藏  举报  来源