python爬虫学习手册-服务器渲染(基础库urllib3)熟悉

昨天我们说了urllib库是原生的底层库,我觉得原生的东西是好,但是都会有一个统一的缺点,就是用起来繁琐,使用者不如一些其他的库方便,功能也不如其他的库强大,我们今天就来说一说一个功能强大的Python HTTP库-------urllib3库

urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。

它也提供了一些python标准库里面没有的一些新特性:

  • 线程安全
  • 连接池
  • 客户端SSL/TLS验证
  • 文件分部编码上传
  • 协助处理重复请求和HTTP重定位
  • 支持压缩编码
  • 支持HTTP和SOCKS代理

一、安装

urllib3有两种安装方式,都是非常简单好用

1.使用pip方式安装

pip install urllib3

2.使用源码进行安装

需要先下载源码 urllib3源码,在使用如下命令

python setup.py install

如果还是不明白请参照---》python源码安装详细步骤

二、使用

1.导入urllib3包

import urllib3

2.创建PoolManager

使用urllib3需要创建一个叫PoolManager实例的东西,不需要知道这是什么,你只要记住有这么个东西,你以后的各种操作PoolManager是基础,使用如下命令创建

http = urllib3.PoolManager()

3.生成第一个GET请求

有了HTTP之后我们就可以来生成第一个请求,使用如下命令

r = http.request('GET', 'https://www.baidu.com/') #请求方式为GET,如果使用POST换成POST即可
print(r.status)#如果请求成功,返回200
print(r.data.decode())#获得html编码

4.请求里的其他参数

  • 设置headers
header = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
             }
r = http.request('GET',
             'https://www.baidu.com/',
             headers=header) #请求里设置headers头
  • Timeout
r = http.request('GET',
                 'https://www.baidu.com/',timeout=3.0)

也可以设置全局的timeout

http = urllib3.PoolManager(timeout=3.0)

这样所有的request都使用一个timeout

5.POST请求

我们可以使用POST方法向链接和服务器提交一些东西

  • 向链接里添加一些东西
 r = http.request('POST',
                     'https://www.baidu.com/',
                     fields={'hello':'world'})

这样链接里就包含了我们提交的信息

  • 发送JSON数据
    在发起请求时,可以通过定义body 参数并定义headers的Content-Type参数来发送一个已经过编译的JSON数据
import json
data={'attribute':'value'}
encode_data= json.dumps(data).encode()
r = http.request('POST',
                     'https://www.baidu.com/',
                     body=encode_data)
  • 上传文件,上传文件分两种一种是本地文本文件,另一种是本地二进制文件
    上传本地文本文件
with open('test.txt','r+',encoding='UTF-8') as f:
    file_read = f.read()
r = http.request('POST',
                 'https://www.baidu.com/',
                 fields={'filefield':('test.txt', file_read, 'text/plain')
                         })

上传二进制文件

with open('test.jpg','rb') as f2:
    binary_read = f2.read()
r = http.request('POST',
                 'https://www.baidu.com/',
                 body=binary_read
                })

6.编码方式

对于POST和PUT请求,需要手动对传入数据进行编码,然后加在URL之后

encode_arg = urllib.parse.urlencode({'arg': 'value'})
print(encode_arg.encode())
r = http.request('POST',
                 'https://www.baidu.com/'+encode_arg,
                 headers=header)

7.重定向,请求重试相关

  • 可以通过设置retries参数来控制重定向次数,默认是3次
r = http.request('GET',
                 'https://www.baidu.com/',retries=6)

设置重定向次数为6次

  • 关闭重定向,但是保留请求重试
r = http.request('GET',
                 'https://www.baidu.com/',redirect=False)

只需要将redirect设置为False即可

  • 关闭重定向及请求重试
r = http.request('GET',
                 'https://www.baidu.com/',retries=False,redirect=False)

如上所示,全部设置为False即可
ps(上面添加的东西,如timeout、headers、重定向及重试次数,想全局生效只需要在PoolManager里面设置即可,设置方式和正常设置一样)
那么会有的朋友问了,如果在全局和局部都设置了怎么办?局部设置>全局设置

三、后记

学习了这个库,是不感觉比作态你对urllib强大了很多,但是这还不是最好用,最方便的,后面我们会将到
惯例 urllib3官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容