当前位置: 首页 > article >正文

Python requests模块 快速入门 这篇就够了

目录

一、Requests概述

二、安装Requests

三、Get请求

3.1 Get请求示例

3.2 Get请求爬取二进制数据

四、Post请求

4.1 Post请求示例

4.2 发送JSON数据

五、验证Cookies

六、会话请求


一、Requests概述

Requests是一个流行的Python第三方库,它专为HTTP通信而设计,旨在使网络请求更加简单和人性化。以下是关于Requests的概述:

  1. 简单易用:Requests提供了简洁明了的API,使得发送HTTP请求变得非常直观。与Python标准库中的urllib相比,Requests的语法更加简洁,易于学习和使用。
  2. 功能全面:Requests支持HTTP的所有主要方法,如GET、POST、PUT、DELETE等。它还支持设置请求头、请求体、超时时间、代理等。此外,Requests还支持会话保持、文件上传、自动内容解码和JSON解析等功能。
  3. 自动化处理:Requests库内部处理了许多底层的细节,如连接池管理、Keep-alive连接、URL编码等,使得开发者可以专注于业务逻辑而无需关心底层的HTTP通信细节。
  4. 良好的文档和社区支持:Requests拥有详尽的官方文档和活跃的社区,这意味着开发者可以轻松地找到问题的答案或获得帮助。
  5. 兼容性:Requests库在Python 2和Python 3中都可以使用,并且与许多其他Python库和框架兼容。
  6. 安全:Requests在处理HTTPS请求时提供了SSL验证和证书管理功能,确保通信的安全性。

二、安装Requests

确保你已经安装了Requests库。如果还没有安装,可以使用pip进行安装

pip install requests

三、Get请求

3.1 Get请求示例

这个示例中,我们定义了请求的URL、查询参数和请求头。然后,我们使用requests.get()方法发送GET请求,并获取响应对象。接着,我们检查响应的状态码以确保请求成功,并输出请求的URL、状态码和响应内容。如果服务器返回的是JS ON数据,我们还尝试解析它并打印出来。

请注意,你需要将urlparamsheaders替换为你实际要发送请求的目标URL、查询参数和请求头信息。此外,处理响应时,你可能需要根据实际情况调整代码,以正确处理服务器返回的数据。 

示例:

import requests

# 定义请求的URL
url = 'https://www.baidu.com'

# 定义查询参数
params = {
    'key1': 'shenghao',
    'key2': 'haozi'
}

# 定义请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# 发送GET请求
response = requests.get(url, params=params, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # 输出请求URL
    print('请求URL:', response.url)

    # 输出响应状态码
    print('状态码:', response.status_code)

    # 输出响应内容(文本格式)
    print('文本响应内容:', response.text)

    # 如果你知道服务器返回的是JSON数据,可以解析它
    try:
        data = response.json()
        print('JSON响应内容:', data)
    except ValueError:
        print('响应内容不是有效的JSON格式')

else:
    # 如果请求失败,打印错误信息
    print('请求失败,状态码:', response.status_code)
    print('错误信息:', response.reason)

# 你还可以获取其他响应信息,如编码方式和内容长度
print('响应编码:', response.encoding)
print('内容长度:', len(response.content))

3.2 Get请求爬取二进制数据

使用 Requests 库从 URL 下载二进制数据(例如,一个图片文件)

示例:

import requests

# 图片文件的URL
url = 'https://www.baidu.com/img/bd_logo1.png'

# 发送GET请求,获取二进制响应内容
response = requests.get(url, stream=True)

# 检查请求是否成功
if response.status_code == 200:
    # 以二进制格式打开本地文件用于写入
    with open('image.jpg', 'wb') as file:
        # 使用iter_content方法按块读取响应内容,减少内存使用
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:  # 过滤掉空块
                file.write(chunk)
    print('图片下载成功!')
else:
    print('请求失败,状态码:', response.status_code)

四、Post请求

4.1 Post请求示例

示例:

import requests

# 定义请求的URL
url = 'https://httpbin.org/post'

# 定义要提交的表单数据
form_data = {
    'username': 'shenghao',
    'password': 'haozi'
}

# 设置请求头,通常不需要特别设置,但有时候可能需要
headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

# 发送POST请求
response = requests.post(url, data=form_data, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # 输出响应内容
    print('请求成功!')
    print('响应内容:', response.text)
else:
    # 如果请求失败,打印错误信息
    print('请求失败,状态码:', response.status_code)
    print('错误信息:', response.reason)
    # 还可以打印出服务器返回的错误信息,如果有的话
    if response.text:
        print('服务器返回的错误信息:', response.text)

4.2 发送JSON数据

通过POST请求发送JSON数据,你需要设置Content-Type头为application/json,并将数据编码为JSON格式

示例:

import requests
import json

# 定义请求的URL
url = 'https://httpbin.org/post'

# 定义要提交的JSON数据
json_data = {
    'username': 'shenghao',
    'password': 'haozi'
}

# 将Python字典转换为JSON字符串
json_string = json.dumps(json_data)

# 设置请求头
headers = {
    'Content-Type': 'application/json'
}

# 发送POST请求
response = requests.post(url, data=json_string, headers=headers)

# 检查请求是否成功
if response.status_code == 200:
    # 输出响应内容
    print('请求成功!')
    print('响应内容:', response.json())  # 假设服务器返回的是JSON格式的数据
else:
    # 如果请求失败,打印错误信息
    print('请求失败,状态码:', response.status_code)
    print('错误信息:', response.reason)
    # 还可以打印出服务器返回的错误信息,如果有的话
    if response.text:
        print('服务器返回的错误信息:', response.text)

五、验证Cookies

使用cookies进行登录验证通常涉及以下步骤:

  1. 通过用户名和密码发送登录请求到服务器。
  2. 服务器验证用户名和密码,如果验证成功,会设置一个或多个cookies,并将其发送给客户端。
  3. 客户端在接下来的请求中携带这些cookies,以证明用户的登录状态。

示例:

import requests

# 登录URL
login_url = 'https://httpbin.org/post'
# 目标URL(需要登录后才能访问)
target_url = 'https://example.com/protected-resource'

# 登录时所需的数据
login_data = {
    'username': 'shenghao',
    'password': 'haozi'
}

# 第一步:发送登录请求
login_response = requests.post(login_url, data=login_data)

# 假设登录成功,服务器会设置cookies
# 我们从登录响应中获取这些cookies
if login_response.status_code == 200:
    # 获取cookies
    cookies = login_response.cookies.get_dict()

    # 第二步:使用获取到的cookies发送请求到目标URL
    target_response = requests.get(target_url, cookies=cookies)

    # 打印目标URL的响应内容
    print(target_response.text)
else:
    print("登录失败,状态码:", login_response.status_code)

六、会话请求

Session对象提供了一种方式来跨多个请求保持某些参数和cookies。当你需要向同一网站发送多个请求,并且这些请求之间需要共享某些状态(比如cookies或认证信息)时,使用Session是非常有用的。

示例:

import requests

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

# 使用Session对象发送第一个请求(例如登录)
login_url = 'https://httpbin.org/post'
login_data = {'username': 'shenghao', 'password': 'haozi'}
login_response = s.post(login_url, data=login_data)

# 检查登录是否成功
if login_response.status_code == 200:
    print('登录成功!')
else:
    print('登录失败,状态码:', login_response.status_code)

# 发送第二个请求(需要身份验证的资源)
protected_url = 'https://httpbin.org/get'
protected_response = s.get(protected_url)

# 由于Session对象自动处理cookies,所以不需要手动设置cookies
# 检查受保护资源的请求是否成功
if protected_response.status_code == 200:
    print('访问受保护资源成功!')
    print('响应内容:', protected_response.text)
else:
    print('访问受保护资源失败,状态码:', protected_response.status_code)

# 关闭Session(可选,因为Session对象会在Python对象被垃圾回收时自动关闭)
s.close()


http://www.kler.cn/news/234807.html

相关文章:

  • 中国电子学会2019年12月份青少年软件编程Scratch图形化等级考试试卷三级真题(选择题、判断题)
  • 导入jar包的办法,若Maven报日志错误,Cannnot resolve XXXXX.jar
  • Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目
  • leetcode——滑动窗口题目汇总
  • python中的数组和list的异同
  • C语言之随心所欲打印三角形,金字塔,菱形(倒金字塔)
  • Go语言每日一练——链表篇(五)
  • Spring Cloud Hystrix 参数配置、简单使用、DashBoard
  • vim 启用鼠标复制粘贴
  • LeetCode Python - 9.回文数
  • IP地址如何保护网络安全
  • 自然语言处理(NLP)—— 基本概念
  • ThreeDPose
  • MongoDB数据迁移
  • Rust入门问题: use of undeclared crate or module `rand`
  • ubuntu彻底卸载cuda 重新安装cuda
  • STM32 7-8
  • 【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络
  • 锐捷(二十)DHCP Snooping + IP Source guard + ARP-check防ARP欺骗方案
  • 格子表单GRID-FORM | 文档网站搭建(VitePress)与部署(Github Pages)
  • SQL语句执行顺序相关问题
  • React Native开发iOS实战录
  • Android 自定义BaseFragment
  • Linux和Windows文件共享实现方式
  • 2024美赛C题保姆级分析完整思路代码数据教学
  • FL Studio版本升级-FL Studio怎么升级-FL Studio升级方案
  • 多进程服务器和多线程服务器
  • Vue - 快速入门(一)
  • 腾讯云4核8G12M轻量应用服务器性能够用吗?支持多少人?
  • sheng的学习笔记-部署-目录