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

news2024/10/5 4:34:36

目录

  • 🌟前言
  • 🍉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库的强大之处在于其简单直观的接口设计,使得开发者能够快速上手并完成复杂的网络请求任务,而无需关注底层细节。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业微信hook接口协议,ipad协议http,同步消息记录

同步消息记录 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信limit是int每次返回大小seq是int查询下标 请求示例 {"uuid":"ecb033af-6fcd-4ec2-880e-41f070b65eaf","limit":1000, "seq":1…

led灯哪个品牌质量好?分享五款耐用又护眼的护眼台灯

led灯哪个品牌质量好?在LED照明日益普及的今天,选择一款质量上乘、耐用且护眼的LED台灯显得尤为重要。本文将为大家推荐五款备受好评的护眼台灯品牌,这些品牌凭借其卓越的照明效果、舒适的视觉体验以及优质的售后服务,成为了市场上…

根据特定条件在列表中加一列操作,符合此条件时此列才会展示

我们想要列表中有一列数据在A环境打开是显示的,在B环境打开则不显示,这里B环境表示为默认环境 1、不能直接用环境判断加在列表的前面,否则其他环境会出现空格情况 constructor(props) {super(props)const columns [{ title: 姓名, dataInd…

英语口语打分和纠正的开发引擎

英语口语打分和纠正的开发引擎包括但不限于以下几种,这些引擎利用了深度学习、大数据分析等先进技术,能够对发音准确度、流利度、完整度、韵律特征等进行全方位评价和纠正。开发者可以根据自己的需求选择合适的引擎进行集成,以提升英语口语学…

PSO-SVM多变量回归预测|粒子群算法优化支持向量机|Matalb

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

【Tello无人机】实物轨迹跟踪控制

上一篇介绍了Tello无人机仿真环境中的飞行控制,本篇将介绍tello无人机在物理系统中的轨迹跟踪,实现实物无人机的速度控制。本文采用的无人机为Tello TT,TELLO Talent由飞行器和拓展配件两部分组成。飞行器配备视觉定位系统,并集成…

618有哪些值入手的好物?盘点618值得选购好物清单

马上就要618大促了,要说618期间优惠力度最大的那肯定还是家电、数码这一类型的,下面就给大家整理了几款值得入手的家电数码好物! 好物推荐一、西圣Mike无线领夹麦克风 真的强烈推荐西圣Mike无线领夹麦克风!市场上某些制造商可能…

hadoop yarm你知道吗?

一、概念 Hadoop YARN(Yet Another Resource Negotiator)是Hadoop 2.x版本中的一个重要组件,用于资源管理和作业调度。它是Hadoop的第二代资源管理器,取代了Hadoop 1.x版本中的MapReduce作业调度器。 通俗地理解它的作用有点像一…

如何训练一个大模型:LoRA篇

目录 写在前面 一、LoRA算法原理 1.设计思想 2.具体实现 二、peft库 三、完整的训练代码 四、总结 写在前面 现在有很多开源的大模型,他们一般都是通用的,这就意味着这些开源大模型在特定任务上可能力不从心。为了适应我们的下游任务,…

高效快速 推荐这款服务器同步软件

服务器数据同步是为了确保在不同的服务器或数据中心之间能够保持数据的一致性和可用性,选择一款合适的服务器同步软件,可确保数据完整性、提高服务质量和满足业务需求的重要手段。 服务器数据同步的痛点主要包括: 1、数据一致性:…

SQL-递归查询

运行环境: Mysql8以上,递归查询功能在8以上版本被正式引入 一、SQL递归查询的概念 递归指的是通过调用函数或过程或自身来解决问题的方法,常用于一些具有规律性循环的操作。SQL递归查询是基于一组初始数据,通过递归查询&#xf…

Redis继续(黑马)

Redis持久化 RDB与AOF RDB记录是二进制数据,Redis停机时会触发保存,名称: dump.rdb 缺点:间歇式复制可能存在宕机数据更新丢失 AOF 记录的写操作命令,每秒记录一下,也存在数据更新丢失的可能,相…

【class6】人工智能初步(选择一个合适的监督学习算法。)

【昨日内容复习】 进行监督学习时,第一个步骤是提取数据集的文本特征和对应的标签。 提取文本特征的具体步骤如下: STEP1. 构造词袋模型,提取数据集中的文本特征 STEP2. 使用toarray()函数,将X转换为一个NumPy数组,方…

【5月13日】YesPMP众包平台最新项目

YesPMP众包平台5月13日最新项目,有感兴趣的用户查看项目接单,甲乙方无障碍沟通。 1.查看项目:分析一款PC端登录协议及收发消息 2.查看项目:《中华历史漫画》 3.查看项目:图像算法 …

什么是CCRC?做什么用的?

CCRC(中国网络安全审查认证和市场监管大数据中心)原名为中国网络安全审查技术与认证中心,也被称为中国信息安全认证中心(ISCCC)。 该中心是经中央机构编制委员会办公室批准成立的,其主要职责是依据国家法律…

设计模式 六大原则之开放封闭原则

文章目录 定义理解 小结 定义 开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。 理解 怎么理解这个呢&#x…

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架

电子产品量产测试与烧写工具。这是一套软件,用在我们的实际生产中, 有如下特点: 1.简单易用: 把这套软件烧写在 SD 卡上,插到 IMX6ULL 板子里并启动,它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…

【C语言】深度解析:动态内存管理的机制与实践

🔥引言 本篇将深度解析:动态内存管理的机制。为了更加灵活分配内存中的空间,库中为了我们提供了一些的函数,去动态开辟和释放堆上的空间。 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 &a…

询问贴:这要怎么设置捏,寻思着总不该一个一个挖空吧????

这要怎么设置捏,寻思着总不该一个一个挖空吧????

Hadoop3.4.0 完全分布式集群 运行环境搭建 VMware Workstation 虚拟机 大数据系列 一

一 生产环境集群模式部署,需要多台主机,主机之间通过密钥相互访问. 1 配置如图 节点名字节点IP系统版本master11192.168.50.11centos 8.5slave12192.168.50.12centos 8.5slave13192.168.50.13centos 8.5 2 安装服务器 #先安装一台master11&#xff…