Request请求数据 (** kwargs参数)

这里写目录标题

  • 🌟前言
  • 🍉request入门
      • 1. params
      • 2. data
      • 3. json
      • 4. headers
      • 5. cookies
      • 6. auth
      • 7. files
      • 8. timeout
      • 9. proxies
      • 10. allow_redirects
      • 11. stream
      • 12. verify
      • 13. cert
  • 🌟总结


🌟前言

在Python中,发送网络请求是一项常见的任务,特别是对于爬虫开发、API调用或任何需要与远程服务器交互的应用。requests库是最受欢迎的用于发送HTTP请求的第三方库,它提供了简洁易用的API来执行GET、POST、PUT、DELETE等多种HTTP方法。

在这里插入图片描述

🍉request入门

  • requests.request(method,url,** kwargs)

    **kwargs:控制访问的参数,均为可选项

    method:请求方式

参数说明
1params跟在url连接后面,查询(搜索)的含义,字典或者字流格式
2data终点作为向服务器提供或提交资源时使用,字典、字节序列或文件对象,作为Request的内容
3jsonJSON格式的数据,作为Request的内容
4headers字典、HTTP定制头
5cookies字典或CookieJar,Request中的cookie
6auth元组,支持HTTP认证功能
7files字典类型,传输文件
8timeout设定超时时间,秒为单位
9poroxies字典类型,设定访问代理服务器,可以增加登录认证
10allow_redirectsTrue/False,默认为True,重定向开关
11streamTrue/False,默认为True,获取内容立即下载开关
12verifyTrue/False,默认为True,认证SSL证书开关
13cert本地SSL证书路径

1. params

import requests
url = "https://example.com/search"
params = {
    "query": "Python爬虫",
    "page": 1
}
response = requests.get(url, params=params) # 最终得到url = https://example.com/search?query=Python爬虫&page=1

2. data

import requests
url = "https://example.com/login"
# 相当于填写表单数据,如登录表单,post请求
data = {
    "username": "your_username",
    "password": "your_password"
}
response = requests.post(url, data=data) 

3. json

json参数的作用是简化向API发送JSON数据的过程,确保了数据的正确序列化和HTTP头部的恰当设置,非常适合与那些期望接收JSON输入的现代Web服务交互。

import requests
import json
url = "https://api.example.com/data"
data = {
    "key": "value",
    "another_key": "another_value"
}
response = requests.post(url, json=data)
# 注意:requests库内部会自动将data转换为JSON字符串,
# 并设置Content-Type为application/json
# data是一个Python字典,通过json=data传递给requests.post方法后,requests会将其转换为JSON字符串{"key": "value", "another_key": "another_value"}并设置请求头,以表明发送的是JSON格式的数据。

4. headers

实际上是http头的相关域,它对应了向某一个url访问时所发起的http头字段,利用这个字段定制某个访问url的http的协议头

  • User-Agent: 指定客户端的信息,很多网站会根据这个字段判断访问者是浏览器还是爬虫,有时需要将其设置为常见的浏览器字符串来避免被识别为爬虫。
  • Accept-Language: 指定客户端接受的语言种类,可以帮助获取特定语言的网页内容。
  • Content-Type: 当发送POST请求且包含请求体时,这个字段指定了数据的格式,如application/x-www-form-urlencodedapplication/json等。
  • Authorization: 如果网站需要认证,可以通过这个字段提供Token或其他认证信息。
import requests
url = "https://example.com"
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",
    "Accept-Language": "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
}
response = requests.get(url, headers=headers) # 模仿浏览器,请求数据

5. cookies

从http中解析cookies,它可以是字典,也可以是cookieJar形式;

解释:通过cookies参数携带相应的cookie信息,可以使爬虫模拟已登录用户的行为,访问那些需要登录后才能查看的内容。这在爬取需要身份验证的网站数据时尤为重要。

作用:cookies参数在Python爬虫中的作用是模拟浏览器的cookie机制,帮助爬虫程序绕过登录限制,访问受保护的内容,或是维持与服务器的会话状态,提高数据抓取的准确性和效率。

import requests
url = "https://example.com/userinfo"
cookies = {
    "sessionid": "abcdef123456",
    "user": "example_user"
}
response = requests.get(url, cookies=cookies)

6. auth

字段是一个元组类型,它是支持http认证功能的,auth参数可以是一个元组,通常包含用户名和密码,或者是一个AuthBase的子类实例,用于自定义认证方案。

# 基本HTTP认证
from requests.auth import HTTPBasicAuth
url = "https://api.example.com/private"
username = "your_username"
password = "your_password"
response = requests.get(url, auth=HTTPBasicAuth(username, password))

# API密钥认证
class APITokenAuth(requests.auth.AuthBase):
    def __init__(self, token):
        self.token = token
    def __call__(self, r):
        r.headers['Authorization'] = f'Token {self.token}'
        return r
url = "https://api.example.com/data"
token = "your_api_token"
response = requests.get(url, auth=APITokenAuth(token))

# OAuth认证
对于支持OAuth的API,虽然直接通过auth参数处理可能较为复杂(通常需要先通过一系列步骤获取访问令牌),但也可以根据具体流程封装认证逻辑到自定义的AuthBase子类中。
通过合理使用auth参数,Python爬虫能够安全有效地访问那些需要认证的资源,确保了数据请求的合法性与安全性。

7. files

如何使用files参数上传一个图片文件

import requests
url = "https://example.com/upload"
file_path = "/path/to/your/image.jpg"
with open(file_path, 'rb') as file:
    files = {'image': (file_path, file, 'image/jpeg')}  # 文件名,文件对象,MIME类型
    response = requests.post(url, files=files)
print(response.text)

在这个例子中,我们首先打开要上传的图片文件,并以二进制模式读取('rb')。然后,我们将文件信息构造成一个字典,其中键 'image' 是服务器端预期接收文件的字段名,值是一个元组,包含文件名(这里也可以是任意字符串,服务器端可能会用作文件名)、文件对象和文件的MIME类型。最后,通过requests.post()方法发送POST请求,并将这个字典作为files参数传入。

files参数的使用让Python爬虫能够执行涉及文件上传的任务,如图片上传、文件分享网站的数据抓取等场景。


8. timeout

用于设置网络请求的超时时间,如果一个请求超过指定的秒数还没有得到响应,requests库将会抛出一个异常,而不是无限期地等待下去

import requests
url = "https://example.com"
timeout = 5  # 设置超时时间为5秒
try:
	response = requests.get(url, timeout=timeout)
	# 处理响应数据
	except requests.exceptions.Timeout:
	# 超时处理逻辑
		print("请求超时")
   # 请求https://example.com在5秒内没有得到服务器的响应,程序将不会一直等待,而是立即执行except块中的代码,打印出“请求超时”的信息

9. proxies

解释:proxies 参数用于配置HTTP或HTTPS代理服务器。代理服务器作为中间人,可以接收你的爬虫程序发出的网络请求,然后转发给目标服务器,并将响应结果再返回给你的爬虫。

目的:

  1. 匿名性:隐藏真实IP地址,防止被目标网站识别和封锁,尤其是在进行大量请求时,减少被封禁的风险。
  2. 地域限制绕过:通过选择不同地区的代理服务器,可以访问地理位置受限的内容或服务,比如某些网站仅对特定国家或地区开放。
  3. 性能优化:如果目标服务器对你的物理位置响应较慢,使用地理位置更近的代理服务器可以加快访问速度。
  4. 负载均衡和带宽管理:企业级应用中,可能会利用代理服务器来分配请求,优化网络资源使用。
import requests
proxies = {
    "http": "http://代理服务器地址:端口",
    "https": "https://代理服务器地址:端口",
}
response = requests.get("http://example.com", proxies=proxies)

代码解释:proxies参数是一个字典,其中键为协议名(“http” 或 “https”),值为代理服务器的URL(包括协议、地址和端口)。这样,所有通过requests发起的请求都会通过指定的代理服务器进行。

注意:使用代理时应遵守目标网站的使用条款和服务协议,合法合规地进行数据抓取,尊重网站的Robots协议,并尽量减少对目标服务器的负担。同时,选择稳定可靠的代理服务对于爬虫的成功运行至关重要。


10. allow_redirects

requests库会自动处理重定向,即自动向新的URL发送请求。当设置为False时,则不自动处理重定向,而是直接返回原始的重定向响应。

import requests
# 允许重定向
response = requests.get('http://example.com/redirect', allow_redirects=True)
print(response.url)  # 最终重定向后的URL
# 禁止重定向
response = requests.get('http://example.com/redirect', allow_redirects=False)
print(response.status_code)  # 可能会得到一个重定向的状态码,如301或302
print(response.headers['location'])  # 获取重定向的目标URL,而不是自动访问

11. stream

解释:在使用Python的requests库进行网络请求时,stream参数是一个非常实用的选项,它的主要作用是控制是否立即下载响应内容。当设置stream=True时,requests不会立即下载整个响应体,而是等到你需要时才按需读取,这对于大文件下载或者仅需处理部分响应内容的场景非常有用
stream参数的作用

  1. 节省内存:对于大型文件的下载,如果直接下载整个响应体到内存中,可能会消耗大量内存资源。使用stream=True可以让数据边下载边处理,减少内存占用。
  2. 按需读取:当你只想读取响应的一部分内容,而不是全部时,使用流式处理可以更加高效。例如,你可能只需要检查响应的前几行来决定是否继续下载剩余内容。
  3. 长时间运行的连接:在某些情况下,保持连接打开并逐步处理响应内容是有益的,比如实时数据流处理。
import requests
url = "http://example.com/large_file.zip"
response = requests.get(url, stream=True)
# 检查请求是否成功
if response.status_code == 200:
	# 打开一个本地文件用于保存下载的内容
	with open('large_file.zip', 'wb') as f:
		for chunk in response.iter_content(chunk_size=1024): 
			# 如果chunk不是空的,才写入文件
			if chunk: 
  				f.write(chunk)

12. verify

  • verify=True,这意味着requests会验证服务器的SSL证书,确保与之建立的HTTPS连接是安全的,可以防止中间人攻击。
  • 有时候你可能需要关闭这个验证,比如在测试环境中,或者当遇到自签名证书(self-signed certificate)或证书链不完整的情况,这时可以将verify设置为False。不过,这样做会降低安全性,应该谨慎考虑,并仅在确信不会导致安全问题的情况下使用。
import requests
url = "https://example.com"
response = requests.get(url, verify=False)

13. cert

  • cert参数可以接收一个表示客户端证书文件路径的字符串,或者一个包含证书文件路径和私钥文件路径的元组。
  • cert 参数用于指定HTTPS请求时的客户端证书。当目标网站或API需要客户端提供安全证书进行身份验证时,就需要用到这个参数。这对于访问那些启用了客户端证书认证的HTTPS服务尤为重要,比如一些内部系统、银行接口或是高度安全的API。
import requests
url = "https://example.com/api/secure-endpoint"
cert = "/path/to/client.pem"  # 单个文件包含证书和私钥
# 或者,如果证书和私钥分开:
# cert = ("/path/to/cert.pem", "/path/to/key.pem")
response = requests.get(url, cert=cert)

🌟总结

requests库的强大之处在于其简单直观的接口设计,使得开发者能够快速上手并完成复杂的网络请求任务,而无需关注底层细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617773.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——结构型模式——代理模式(静态代理、动态代理:JDK、CGLIB)

目录 代理模式 代理模式简介 代理模式的分类 代理模式组成 代理模式的优缺点 静态代理 背景前置 编写代码 JDK动态代理 编写代码 使用Arthas分析JDK动态代理底层原理 CGLIB动态代理 编写代码 三种代理的对比 代理模式使用场景 代理模式 代理模式简介 代理模式属…

数据可视化第五天(读取文件获得男生女生身高信息,并且可视化在一个图像)

文件 需要学生文件的可以私信我 过程 利用numpy的loadtxt文件读取学号,性别,和身高。 import numpy as np import matplotlib.pyplot as pltfilename/Users/oommnn/Desktop/python学习/数据分析/网课资料/第04天/student-data.txtuser_infonp.dtype(…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分,对于城市居民的生活质量和城市形象有着不可忽视的影响。然而,传统的公共厕所管理模式存在诸多问题,如设施老化、卫生状况不佳等,严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

EDA设计学习笔记2:STM32F103C8T6最小系统板的仿绘

今日开始仿制练习一个STM32F103C8T6最小系统板,通过对这个最小系统板的仿制,达到对自己PCB设计的练习的目的,最终目标是自己设计出一块PCB,做一个OLED的桌面小摆件...... 也不知道画出来能不能用..... 目录 主控芯片的搜索与放置…

proteus示波器不弹出来

运行后示波器没有弹出来 点击调试(Debug)在点击Digital Oscilloscope 完成

SamFirm Reborn 0.3.6.8三星固件下载器 汉化版

介绍 在三星手机的维护和升级过程中,固件的获取往往成为了一个难题。幸运的是,有一群热爱技术的开发者们,他们开发了各种工具以简化这个过程。今天,我们要介绍的是一款名为SamFirm Reborn 0.3.6.8的三星固件下载器的汉化版。它旨在…

目前公认的一些好用AI工具

ChatGPT:这是一个广泛推荐和使用的AI聊天机器人,能够进行高效的文本生成和对话管理。它在多个证据中被提及,显示其普遍性和实用性。 Midjourney:这是一款强大的AI绘画工具,特别适合创意写作和图像生成。它在多个来源中…

mysql中的页和行

页 行即表中的真实行,‘行式数据库’的由来 虽然MySQL的数据文件(例如.ibd文件)中的数据页在物理上是通过链表连接的,但是在逻辑上,MySQL使用B树来组织和访问数据。 行:主要是dynamic类型

python 使用 MQTT

目录结构 1、py代码 offRelay12-yixing.py # _*_ coding: utf-8 _*_ # 须用到第三方库:paho-mqtt # 安装命令 python3 -m pip install paho-mqttimport time import json import paho.mqtt.client as mqtt# 函数:关闭所有房间的12路继电器模块上指定的…

正方形中的最多点数

代码实现&#xff1a; 方法一&#xff1a;遍历——超时 int maxPointsInsideSquare(int **points, int pointsSize, int *pointsColSize, char *s) {int a 0;int flag 1;int num, pre_num 0;while (flag) {num pre_num;pre_num 0;int hash[26] {0};for (int i 0; i <…

通过linux花里胡哨的控制台,学习linux基础命令

今天这个B我装定了&#xff01; 前言命令集 开始1、cowsay &#xff08;让牛说话&#xff0c;够无聊的&#xff0c;但牛说的话是你输入的&#xff0c;细思极恐&#xff01;&#xff09;Debian/Ubuntu 安装命令&#xff1a;RHEL/CentOS/Fedora 安装&#xff1a;运行解释 2、fort…

基于51单片机的多路温度检测调节串口传输系统

基于51单片机的多路温度检测调节 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.采用四个DS18B20温度传感器测温,LCD1602显示四路温度值; 2.三个按键可以设置温度上下限; 3.当每路温度值超过设定的上或下限时,蜂鸣器报警,对应的指示灯亮;…

代数结构:5、格与布尔代数

16.1 偏序与格 偏序集&#xff1a;设P是集合&#xff0c;P上的二元关系“≤”满足以下三个条件&#xff0c;则称“≤”是P上的偏序关系&#xff08;或部分序关系&#xff09; &#xff08;1&#xff09;自反性&#xff1a;a≤a&#xff0c;∀a∈P&#xff1b; &#xff08;2…

【刷题篇】滑动窗口(二)

文章目录 1、水果成篮2、找到字符串中所有字母异位词3、串联所有单词的子串4、最小覆盖子串 1、水果成篮 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示&#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多…

景源畅信:抖音小店的商品怎么同步到橱窗?

在数字营销的海洋中&#xff0c;抖音小店与橱窗的同步操作无疑是商家们关注的焦点。这不仅能增加商品的曝光度&#xff0c;还能提高交易的可能性。那么&#xff0c;如何将抖音小店的商品同步到橱窗呢? 一、核心步骤解析 要实现商品从抖音小店同步到橱窗&#xff0c;你需要确保…

程序员工作中常见问题,你遇到过几个?

在赛博朋克2077玩后感中&#xff0c;我提到&#xff0c;即便是在严谨的机制下&#xff0c;依然可能出现让人匪夷所思或是贻笑大方的问题。 那么今天&#xff0c;就以后端程序员的视角&#xff0c;盘点下从设计开发到上线的常见问题&#xff0c;看看大家中过几个。 01 设计与开…

栈和队列讲解

文章目录 栈栈的实现栈的初始化压栈出栈获取栈顶元素获取栈内有效元素个数检查是否为空销毁栈栈的使用 栈全部代码队列的初始化队尾入队列队头出队列获取队列头部元素获取队列队尾元素获取队列中有效元素个数检测队列是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果…

Java设计模式-工厂

Java设计模式中&#xff0c;工厂模式主要包括普通工厂模式以及抽象工厂模式&#xff0c;普通工厂模式是用于制造输出不同类型的对象&#xff0c;抽象工厂模式是用于制造输出不同类型的普通工厂&#xff0c;本文主要描述工厂模式的基本用法。 如上所示&#xff0c;使用普通工厂模…

HCIP(BGP综合实验)--8

一&#xff1a;实验要求 二&#xff1a;实现过程 &#xff08;一&#xff09;配置IP地址&#xff1a; AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [AR1-GigabitEthernet0/0/0]int l0 [AR1-LoopBack0]ip add 172.16.0.1 32 [AR1-LoopBack0]int l1 […

C++异常详解

文章目录 前言一、回顾C语言二、异常的概念三、异常的使用1.异常的抛出和捕获2.异常的重新捕获 三.异常安全与异常规范1.异常安全2.异常规范 四.自定义异常体系五.C标准库的异常体系六.异常优缺点练习题总结 前言 在本篇文章中&#xff0c;我们将会详细介绍一下有关C异常的讲解…