python-爬虫-urllib3

news2024/12/24 0:28:53

导入模块

import urllib3

urllib3:功能强大、条理清晰、用于HTTP客户端的python网络请求库

重要特征
1.线程安全
2.连接池
3.客户端SSL/TLS验证
4.使用分段编码长传文件
5.重试请求和处理HTTP复位的助手
6.支持gzip和deflate编码
7.HTTP和SOCKS的代理支持
8.100%的测试覆盖率

1.发起请求

导入模块

import urllib3

通过PoolManager实例生成请求,由该实例对象处理与线程池的连接及线程安全的所有细节,不需要任何人为操作

http = urllib3.PoolManager()
http	# <urllib3.poolmanager.PoolManager at 0x1ecf4917710>

通过request()创建请求,返回一个HTTP Response对象

r = http.request('GET','https://fanyi.baidu.com/')
r		# <urllib3.response.HTTPResponse at 0x1ecf7613080>

通过响应对象的data等方法可以获取响应结果,使用decode对返回的数据进行解码

r.data		# 有乱码
r.data.decode('utf8')	# 使用decode对返回的数据进行解码
import urllib3
http = urllib3.PoolManager()
r = http.request('GET','https://fanyi.baidu.com/')
r.data
r.data.decode('utf8')

在这里插入图片描述

request()可以通过参数控制请求的类型

传递POST参数值,该请求数据部分涵盖发送其他类型的请求的数据,包括JSON、文件和二进制数据

http = urllib3.PoolManager()
r = http.request(
    'POST',
    'http://httpbin.org/post',
    fields={'hello':'world'}
)
r.data

在这里插入图片描述

得到的字符串结果前有子母b,b前缀表示一个字节序列(bytes)对象
字节序列是不可变的序列,由0或多个字节组成,每个字节都用0到255之间的整数表示

2.bytes对象常用方法

创建bytes对象

b = b'hello world'

转换为bytes对象

s = 'hello world'
b = s.encode()
b	# b'hello world'

将bytes对象转换为字符串

b = b'hello world'
s = b.decode()
s	# 'hello world'

访问字节
b[0]取出的是字节’h’的ASCII码,即104

b = b'hello world'
b[0]  # 访问第一个字节,输出104

拼接字节

b1 = b'hello'
b2 = b'world'
b1 + b2		# b'helloworld'

字节与字符串的转换

b = b'hello world'
s = str(b, encoding='utf-8')  	# 'hello world'   	# 转换为字符串
b = bytes(s, encoding='utf-8') 	# b'hello world' 	# 转换为bytes

需要注意的是,在Python3中,字符串是默认以Unicode编码的,因此需要显式指定编码方式进行转换

3.响应内容

发起请求之后,会返回一个响应内容(包含status、data、header等属性)

http = urllib3.PoolManager()
r = http.request('get','http://httpbin.org/ip')
r.status	# 200
r.data		# b'{\n  "origin": "117.136.56.194"\n}\n'
r.headers	# HTTPHeaderDict({'Date': 'Tue, 12 Sep 2023 12:38:40 GMT', 'Content-Type': 'application/json', 'Content-Length': '33', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'})

如果data返回的是json格式的字符串,可通过json库解码和反序列data请求的属性加载json内容

import urllib3
import json

http = urllib3.PoolManager()
r = http.request('get','http://httpbin.org/ip')
json.loads(r.data)	# {'origin': '117.136.56.194'}

4.查询参数

对于GETHEADDELETE请求,可以简单的传递参数作为一个字典fields参数

import urllib3
import json

http = urllib3.PoolManager()
r = http.request('GET','http://httpbin.org/get',fields={'arg':'value'})
json.loads(r.data)['args']

在这里插入图片描述
POSTPUT请求,需要在URL中手动编码查询参数

import urllib3
import json
from urllib.parse import urlencode

http = urllib3.PoolManager()
encoded_args = urlencode({'arg':'value'})		# 'arg=value'
url = 'http://httpbin.org/post?' + encoded_args	# 'http://httpbin.org/post?arg=value'
r = http.request('POST',url)
json.loads(r.data)['args']	# {'arg': 'value'}
json.loads(r.data)

在这里插入图片描述

5.表单数据

PUTPOST请求,urllib3将自动使用fields提供的参数对字典进行格式编码

import urllib3
import json

http = urllib3.PoolManager()
r = http.request('POST','https://httpbin.org/post',fields={'field':'value'})
json.loads(r.data)['form']# {'field': 'value'}
json.loads(r.data)

在这里插入图片描述

6.提交json数据

通过指定编码数据作为body参数,并且通过Content-Type在调用时设置表头来发送json请求

import urllib3
import json

http = urllib3.PoolManager()
data = {'name':'张三','age':23}
encoded_data = json.dumps(data)# '{"name": "\\u5f20\\u4e09", "age": 23}'
encoded_data = json.dumps(data).encode('utf-8')# b'{"name": "\\u5f20\\u4e09", "age": 23}'
r = http.request('POST','https://httpbin.org/post',body=encoded_data,headers={'Content-Type':'aplication/json'})
json.loads(r.data)['json']# {'age': 23, 'name': '张三'}
json.loads(r.data)

在这里插入图片描述

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

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

相关文章

【送书活动】借助ChatGPT和Python,轻松实现办公自动化✨

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

群晖(Synology)NAS 后台安装 Docker 后配置 Activemq Artemis

因最近需要在本地调试消息策略。 如果搞个服务器装就太辛苦了&#xff0c;所以就想到了 NAS&#xff0c;我们的 NAS 上已经装了 Docker&#xff0c;我们直接运行一个 Activemq Artemis 的镜像不就好了。 下载镜像 在进入 NAS 的容器管理后&#xff0c;访问 Registry。 然后…

弱引用回调引发的坑

在开发中&#xff0c;常常会用到回调模型&#xff0c;为了避免回调监听未被主动释放&#xff0c;导致内存泄露&#xff0c;我们会用到 WeakReference 来存放回调引用&#xff0c;然而要注意的是回调类被回收的坑。本文记录笔者开发中遇到弱引用回调被回收的坑及思考。 奇怪的现…

删除的快捷键ctrl加什么?快捷键删除的文件怎么恢复

在许多情况下&#xff0c;我们可以利用电脑的快捷键&#xff0c;即键盘上的组合按键&#xff0c;来执行特定的操作&#xff0c;例如使用组合键删除文件。当我们熟练掌握这些快捷键时&#xff0c;能够显著提升工作效率。那么&#xff0c;你知道ctrl哪个键可以删除文件吗&#xf…

花西子口碑下降,国产化妆品应该如何增加自己的品牌曝光

过去几天&#xff0c;因为花西子一支眉笔克重单价比大牌还贵&#xff0c;而某直播间的主播在面对消费者的质疑时&#xff0c;没有选择解答用户的疑惑&#xff0c;而是质疑消费者的工作能力等等&#xff0c;导致花西子的口碑下降&#xff0c;而主播的印象也逐渐负面&#xff0c;…

【四】3D Object Model之创建Creation——read_object_model_3d()算子

&#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; Halcon算子太多&#xff0c;学习查找都没有系统的学习查找路径&#xff0c;本专栏主要分享Halcon各类算子含义及用法&#xff0c;有…

一、Mediasoup源码介绍

一、Mediasoup 整体结构 整个Mediasoup库通过Nodejs管理&#xff0c;比如整体逻辑、worker、router、producer、consumer...都是通过JS进行管理的。 其底层的数据传输是通过C部分进行控制的&#xff0c;通过NodeJs来控制C部分&#xff0c;以实现整体的数据传输效 二、Mediasou…

【C语言】指针详解(3)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解指针(2)&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一.函数指针数组二.指向函数指针数组的指针&#xff08;不重要&#xff09;三.回调函数 一.函…

9.13 | day 6 |day 45| to 完全平方数

● 70. 爬楼梯 &#xff08;进阶&#xff09; class Solution {public int climbStairs(int n) {int[] dp new int[n1];//设置背包容量&#xff1a;n个int m 2;//有两个物品&#xff0c;注意这是一个完全背包问题dp[0] 1;//initialize ​for(int i 1;i<n;i){//遍历背包f…

前缀和思想

何为前缀和 有一个数组a, 为 ...... 前缀和 ...... 有两个问题: 1.如何求? 只需要从前往后遍历,令 就可以了,最开始是 ,定义 0 2. 有什么用? 能够快速地求出原数组中某一段的和,预处理的…

利用procdump+Mimikatz绕过杀软获取Windows明文密码

利用procdumpMimikatz绕过杀软获取Windows明文密码 1.原理2.实操部分 1.原理 Mimikatz是从lsass.exe中提取明文密码的&#xff0c;当无法在目标机器上运行Mimikatz时&#xff0c;我们可使用ProcDump工具将系统的lsass.exe进程进行转储&#xff0c;导出dmp文件&#xff0c;拖回…

计算机网络工程毕业设计题目选题大全

文章目录 0 简介1 如何选题2 最新网络工程选题2.1 Java web - SSM 系统2.2 大数据方向2.3 人工智能方向2.4 其他方向 4 最后 0 简介 学长搜集分享最新的网络工程专业毕设毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准…

windows 下使用virtualbox7.0设置共享文件夹详细,绝对好用

1、打开virtualbox软件 &#xff0c;点击设置-》存储-》控制器-》新建虚拟光驱&#xff0c;如下图所示 2、 重启virtualbox&#xff0c;重启方式可使用 enter键方式&#xff0c;会弹出一个小窗口&#xff0c;在小窗口中点击 设备-》安装增强功能 点击后&#xff0c;进入linux…

万字总结线程安全问题

目录 1. 线程安全 1.1 线程不安全的原因 1&#xff09;修改共享数据 2&#xff09;原子性 2&#xff09;可见性 2. synchronized 关键字-监视器锁 monitor lock 2.1 synchronized 的特性 1&#xff09;互斥 2&#xff09;可重入 2.2 使用 synchronized 解决上面的线程…

阿里张勇“下课” “逍遥子”从此逍遥了

作者&#xff1a;积溪 琥珀消研社快评&#xff1a;他服务过两个首富&#xff0c;曾被称为找工皇帝&#xff0c;如今张勇从干了16年的阿里辞职&#xff0c; 逍遥子从此逍遥了&#xff1f;#阿里 #张勇 #马云 马爸爸曾说过&#xff0c;他天不怕地不怕&#xff0c;就怕CFO当CEO&a…

【Linux网络】TCP/IP三次握手、四次挥手流程

目录 一、三次握手&#xff0c;建立连接 二、四次挥手&#xff0c;断开连接 三、主要字段 1、标志位&#xff08;Flags&#xff09; 2、序号&#xff08;sequence number&#xff09; 3、确认号&#xff08;acknowledgement number&#xff09; 四、三次握手的报文变化 五…

python3如何安装各类库的小总结

我的python3的安装路径是&#xff1a; C:\Users\Administrator\AppData\Local\Programs\Python\Python38 C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python3.exeC:\Users\Administrator\AppData\Local\Programs\Python\Python38\Scripts C:\Users\Admin…

全球视野,共赴“睛”彩!四川眼科医院2023全国眼科学术大会行圆满收官!

9月6日—10日&#xff0c;国内眼科学界最盛大的学术会议——中华医学会第二十七次全国眼科学术大会(CCOS 2023)在湖南长沙隆重举办!逾万名国内外眼科专家、学者代表参加盛会&#xff0c;聚焦眼科发展的新技术、新知识以及新的经验&#xff0c;分享眼科和视觉科学方面最新的研究…

如何在JavaScript中实现链式调用(chaining)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的链式调用⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴…

JD(商品详情)API接口

为了进行电商平台 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个JD应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载JDAPI的SDK并掌握基本的API基础知识和调用 4&#xff09;利用SDK接口和…