初探requests库:轻松搞定网络请求

初探 requests 库:轻松搞定网络请求

在 Python 中,requests 库是处理网络请求的利器,能轻松实现获取网页、调用 API 等操作,新手也能快速上手。

工作原理简介

requests 库的核心是封装 HTTP 协议的交互过程。当我们用它发送请求时,本质是按照 HTTP 规则向目标服务器传递信息,再接收服务器返回的响应。

简单来说,流程是这样的:

  1. 我们通过代码调用 requests 的方法(如 get、post),传入 URL 和参数;

  2. 库内部将这些信息打包成符合 HTTP 标准的请求格式,包括请求行、请求头、请求体等部分;

  3. 借助底层的网络模块建立 TCP 连接,把构建好的请求发送到目标服务器的指定端口(通常是 80 或 443);

  4. 服务器接收到请求后进行处理,生成响应数据并返回,requests 会将这些原始数据解析成包含状态码、响应头、响应内容等信息的 response 对象,方便我们提取和使用。

安装与基础使用

安装很简单,命令行输入pip install requests即可。如果是在虚拟环境中,确保已激活环境再执行安装命令,这样库会被安装到当前环境中,避免与其他项目产生冲突。

获取网页内容最常用的是get方法,它适用于从服务器获取数据的场景:

import requests


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


print(response.text)  # 以字符串形式返回网页的HTML文本内容


print(response.status\_code)  # 响应状态码,200表示请求成功,404表示页面不存在,500多为服务器内部错误

post方法则主要用于向服务器提交数据,比如登录时提交账号密码、表单提交等场景:

response = requests.post('https://httpbin.org/post', data={'user': 'test'})


print(response.json())  # 若服务器返回JSON格式数据,用json()方法可直接转换成Python字典,方便提取数据

实用功能

  • 模拟浏览器:很多网站会通过检查请求头中的 User-Agent 信息来判断访问者是浏览器还是程序,若识别为程序可能会拒绝提供服务。因此,添加浏览器的 User-Agent 标识能模拟真实浏览器访问,避免被拦截:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}  # 常见的Chrome浏览器标识


response = requests.get('https://example.com', headers=headers)
  • 带参数请求:很多 URL 会带有查询参数,比如搜索内容、分页信息等。用params参数可以自动帮我们拼接这些参数,无需手动在 URL 后拼接字符串,既方便又能避免格式错误:
response = requests.get('https://www.baidu.com/s', params={'wd': 'Python', 'pn': '10'})  # 这里wd是搜索关键词,pn是分页参数,相当于访问https://www.baidu.com/s?wd=Python\&pn=10
  • 获取二进制文件:对于图片、音频、视频等二进制文件,text属性无法正确处理,而content属性会以字节流形式返回内容,正好适用于保存这些文件:
response = requests.get('https://example.com/image.jpg')


with open('img.jpg', 'wb') as f:  # 以二进制写入模式打开文件


f.write(response.content)  # 将字节流写入文件,完成图片保存
  • 超时设置:网络请求可能因网络状况不佳或服务器响应慢而长时间无结果,设置timeout参数可以指定最长等待时间(单位为秒),超过这个时间就会抛出超时异常,避免程序一直卡在请求环节:
try:


requests.get('https://example.com', timeout=5)  # 设置5秒超时,5秒内未收到响应则触发异常


except requests.exceptions.Timeout:


print('请求超时,请检查网络或稍后再试')
  • 保持会话:在一些场景中,如登录后查看个人信息、购物时添加商品到购物车再结算等,需要在多个请求之间保持登录状态。Session对象能在多次请求中保持 cookies 信息,就像浏览器中打开一个标签页进行一系列操作一样:
session = requests.Session()


# 模拟登录,登录信息会被保存在session中


session.post('https://example.com/login', data={'user': 'u', 'pwd': 'p'})


# 登录后访问需要登录才能查看的页面,此时会携带登录时的cookies信息


response = session.get('https://example.com/userinfo')


print(response.text)
  • 文件上传:当需要实现上传图片、文档等文件的功能时,files参数可以轻松实现。只需将文件以二进制读模式打开,作为值传入 files 字典即可:
files = {'file': open('test.txt', 'rb')}  # 字典的键通常对应服务器端接收文件的字段名


requests.post('https://httpbin.org/post', files=files)  # 发送文件到服务器

requests 库把复杂的 HTTP 交互简化,让我们不用深入底层细节,就能轻松完成网络请求。掌握这些基础,应对日常场景足够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值