首页 > 编程语言 >Python的Web请求:requests库入门与应用

Python的Web请求:requests库入门与应用

时间:2024-11-12 17:44:30浏览次数:3  
标签:Web 请求 get Python https print requests response

Python的Web请求:requests库入门与应用

在Python中,进行网络请求和获取数据是许多应用程序的基础功能。requests库是Python中最流行的HTTP库之一,它以简洁、易用、功能强大的特点著称,可以帮助开发者高效地进行各种类型的Web请求。本文将带你快速上手requests库,并展示如何在实际项目中应用它。

一、什么是requests库?

requests库用于发送HTTP请求,是在Python中处理REST API和Web爬虫的首选库。它简化了发送GET、POST等请求的过程,使处理HTTP协议更为高效。和Python标准库的urllib模块相比,requests库使用更方便且提供了更好的错误处理机制。

安装requests

首先确保已经安装requests库:

pip install requests

安装完成后,就可以开始探索它的功能了!

二、基础用法

1. 发送GET请求

GET请求是最常用的请求类型,用于从服务器获取数据。通过requests.get()可以方便地发送GET请求。

import requests

response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code)  # 检查状态码,200表示请求成功
print(response.json())        # 获取响应的JSON内容

这里请求了一个示例API,response.json()将返回服务器的JSON响应数据。

2. 发送POST请求

POST请求通常用于将数据提交到服务器,适合用于登录、上传等场景。

import requests

data = {
    "title": "Hello World",
    "body": "This is a sample post",
    "userId": 1
}
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(response.status_code)
print(response.json())

POST请求中可以通过json参数传递数据。requests会自动将数据编码为JSON格式并添加正确的Content-Type头部。

3. 请求头(Headers)

有时我们需要指定请求头来控制请求行为,例如指定用户代理或授权令牌。

headers = {
    "User-Agent": "Mozilla/5.0",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
response = requests.get("https://api.example.com/data", headers=headers)
print(response.json())

通过headers参数可以轻松设置请求头,以满足API的要求。

4. 查询参数(Params)

可以通过params参数将查询参数添加到请求URL中,比如分页、过滤等。

params = {
    "page": 2,
    "limit": 10
}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)
print(response.url)  # 输出完整的请求URL
print(response.json())

这段代码会发送一个带有查询参数的GET请求,请求URL会自动附加这些参数。

三、响应对象解析

每次请求都会返回一个Response对象,它包含响应的状态、内容、编码等信息。

response = requests.get("https://jsonplaceholder.typicode.com/posts/1")

# 状态码
print(response.status_code)

# 响应文本(字符串格式)
print(response.text)

# JSON数据
print(response.json())

# 响应头
print(response.headers)

# 编码
print(response.encoding)

通过这些属性,可以方便地获取响应的各项内容和细节信息。

四、错误处理

在实际项目中,需要关注请求是否成功,以避免程序中断。requests库提供了基本的错误处理机制,可以通过检查状态码或使用raise_for_status()方法来捕获错误。

try:
    response = requests.get("https://jsonplaceholder.typicode.com/posts/9999")
    response.raise_for_status()  # 如果状态码不是200,将抛出HTTPError异常
except requests.exceptions.HTTPError as e:
    print(f"请求出错: {e}")

此外,requests库也包含了其他异常类型,比如ConnectionErrorTimeoutRequestException等,用于捕获不同的错误情况。

五、超时与重试

在网络请求中,超时和重试是确保程序稳定的重要机制。通过timeout参数可以设置超时时间,以避免请求因网络问题而无限等待。

try:
    response = requests.get("https://jsonplaceholder.typicode.com/posts", timeout=5)  # 超时时间5秒
except requests.exceptions.Timeout:
    print("请求超时")

还可以使用requests库中的Session对象进行重试:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()
retries = Retry(total=3, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
session.mount("http://", HTTPAdapter(max_retries=retries))

response = session.get("https://jsonplaceholder.typicode.com/posts")
print(response.status_code)

这里设置了重试策略,以应对可能的服务器错误。

六、文件上传与下载

1. 上传文件

上传文件是POST请求的常见需求,requests库的files参数可以方便地进行文件上传。

files = {
    "file": open("example.jpg", "rb")
}
response = requests.post("https://httpbin.org/post", files=files)
print(response.json())

2. 下载文件

对于文件下载,可以直接使用response.content保存文件内容。

url = "https://via.placeholder.com/150"
response = requests.get(url)

with open("downloaded_image.jpg", "wb") as file:
    file.write(response.content)

通过这种方式,可以下载图片、PDF等二进制文件。

七、会话(Session)

requests.Session允许在多个请求之间共享会话,特别适用于需要身份验证的情况,例如登录后的请求。

session = requests.Session()

# 先登录
login_data = {"username": "user", "password": "pass"}
session.post("https://example.com/login", data=login_data)

# 登录后访问其他页面
response = session.get("https://example.com/profile")
print(response.text)

通过Session对象,登录后的Cookie会自动在后续请求中携带,保持会话一致性。

八、代理支持

在需要翻墙或隐藏IP的场景下,可以通过代理访问。

proxies = {
    "http": "http://10.10.10.10:8080",
    "https": "https://10.10.10.10:8080"
}
response = requests.get("https://example.com", proxies=proxies)
print(response.status_code)

设置代理可以帮助你在特定网络环境下进行请求,并提供更高的隐私保护。

九、综合实战:获取天气数据

以下是一个结合前面内容的示例,通过API获取城市天气信息。

import requests

def get_weather(city):
    url = "https://api.open-meteo.com/v1/forecast"
    params = {
        "latitude": "40.7128",  # 示例坐标
        "longitude": "-74.0060",
        "hourly": "temperature_2m"
    }
    headers = {
        "User-Agent": "Mozilla/5.0"
    }

    try:
        response = requests.get(url, params=params, headers=headers, timeout=5)
        response.raise_for_status()
        data = response.json()
        print(f"{city} 的天气:", data)
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")

get_weather("New York")

总结

本文介绍了requests库的基本用法和高级应用,包括GET和POST请求、请求头、错误处理、文件上传下载等操作。通过requests库,你可以轻松地完成Web数据采集、API集成、文件处理等任务,是Python开发者必备的工具之一。希望本教程能帮助你掌握requests库的使用,并灵活应用到实际项目中!

标签:Web,请求,get,Python,https,print,requests,response
From: https://blog.csdn.net/liaoqingjian/article/details/143720368

相关文章

  • 基于Python实现的django农业垃圾分类管理系统的设计与实现
    《[含文档+PPT+源码等]精品基于Python实现的django农业垃圾分类管理系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:开发语言:py......
  • 大数据项目-基于python实现的人才招聘数据分析与可视化平台
    《[含文档+PPT+源码等]精品基于python实现的人才招聘数据分析与可视化平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管......
  • 【Java Web】EL表达式
    文章目录EL表达式EL功能获取对象属性获取集合元素数据处理运算屏蔽常见异常自动类型转换EL访问作用域举例一个简单的用户信息展示场景,包含用户的姓名和年龄。下面分别用JSP脚本和EL表达式两种方式实现这个功能。使用JSP脚本<%@pagecontentType="text/h......
  • WebGIS开发及二三维GIS开发框架对比分析
    GIS(地理信息系统)前端开发是GIS应用开发的重要组成部分,随着WebGIS技术的发展,前端开发在地图应用中的作用愈加重要。本文将介绍GIS前端开发的基本计划以及市面上各种二三维GIS开发框架的对比分析。WebGIS开发基础1.了解GIS基础知识GIS前端开发需要掌握GIS基础知识,如地图投......
  • 使用python爬取百度热搜
    文章目录前言一、requests是什么?二、使用步骤1.引入库2.获取页面数据3.使用xpath解析页面,获取词条列表信息4.获取指定元素信息,添加到dataframe中5.保存数据到指定的文件或数据库总结前言本文介绍使用request获取百度热搜的简单功能一、requests是什么?Pythonreq......
  • Python那些事儿 - 注释与数据类型
    第二回初出茅庐前言Python的横空出世,很快吸引了大批的追捧者,大家都加入了对它的了解学习和使用当中。有人编制教学书籍,有人开培训课堂,如今市面上的书籍和培训机构数不胜数。但是对于学习者来说,大家学习Python的开始都是一样的,那就是:#1、代码区输入print('hello,world')#......
  • 用 Python 开发卷积神经网络全解析
    一、准备工作安装必要的库在Python中开发卷积神经网络,我们通常会用到几个非常重要的库,比如TensorFlow和Keras。TensorFlow是一个功能强大的开源机器学习框架,而Keras是构建在TensorFlow之上的高级神经网络API,它让模型的搭建和训练变得更加简洁直观。可以使用以......
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数
    摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了大量图片进行训练,能够准确识别不同成熟度阶段的......
  • 零基础想学习 Web 安全,如何入门?
    想学习 Web安全,如何入门?一.开始前的思考1.我真的喜欢搞安全吗?2.我想通过安全赚钱钱?3.我不知道做什么就是随便?4.一辈子做安全吗这些不想清楚会对你以后的发展很不利,与其盲目的学习web安全,不如先做一个长远的计划。否则在我看来都是浪费时间。一.首先你得了解W......
  • go websocket 服务 及 应用 nginx 的配置
    gowebsocket开启服务ws,wss服务5001对应的是ws,5000对应的是wssgofunc(){ iferr:=r.Run(fmt.Sprintf(":%d",c.WsPort));err!=nil{ global.Logger.Panic("启动失败ws:",err) }}()iferr:=r.RunTLS(fmt.Sprintf(":%d",c.WssPort......