使用urllib3的池管理器

 urllib3是在urllib进行更加深入的改进,最大的好处就是在urllib的基础上添加了池管理,以至于我们不需要再去注意我们需要由那个链接去发送请求,而只需要获取到链接发送回来的相应的数据。这样就可以大大减少我们对于链接的管理。

  urllib3的请求发送其实很简单,只是将需要发送请求的链接添加到池中,池管理器就会自动按照流程继续流程进行信息的发送。

  以下面一个例子进行简单的联系。

 1 '''
2 @Description: 使用urllib3中的链接池发送请求
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-01 17:38:54
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-04 19:15:02
8 '''
9 import urllib3
10 from urllib import parse
11 import simplejson
12 import random
13
14 #设置多个请求头,防止被反扒措施进行拦截
15 ua_list = [
16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #随机pick one
22 ua = random.choice(ua_list)
23
24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例
25 #将链接进行分割,将Ajax需要传递的参数存储到字典中
26 url = "https://movie.douban.com/j/search_subjects"
27 d = {
28 'type':'movie',
29 'tag':'热门',
30 'page_limit':'10',
31 'page_start':'0'
32 }
33
34 #使用urllib3中的池管理方法进行连接。
35 with urllib3.PoolManager() as http:
36 response = http.request('GET','{}?{}'.format(url,parse.urlencode(d)),headers={
37 'User-agent':ua
38 })
39 print(type(response)) #获取方法响应的类型
40 print(response.status,response.reason) #获取状态码和响应结果
41 # print(response.headers) #获取头信息
42 # print(response.data) #获取数据

 requests库的常用的方法

  requests库使用了urllib3的内容,他的API的使用比urllib3更加的友好,同时他也在urllib3 的基础上添加了许多的方法,同时去除了urllib3中的糟粕。requests中提供了method方法,使得我们可以在发送请求的同时可以指定发送请求的类型。

  同时,为了管理请求更加方便,它采用session的方式进行回话的保持,使得我们能够在session和cookie之间来回进行信息的传递。

  下面的两段代码大体实现了requests的常用方法和session发送请求的基本方式。

 1 '''
2 @Description:
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-04 19:14:12
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-04 20:30:20
8 '''
9
10 import requests
11 from urllib.parse import urlencode
12 import random
13
14 #设置多个请求头,防止被反扒措施进行拦截
15 ua_list = [
16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
20 ]
21 #随机pick one
22 ua = random.choice(ua_list)
23
24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例
25 #将链接进行分割,将Ajax需要传递的参数存储到字典中
26 j_url = "https://movie.douban.com/j/search_subjects"
27 d = {
28 'type':'movie',
29 'tag':'最新',
30 'page_limit':'10',
31 'page_start':'0'
32 }
33 url = '{}?{}'.format(j_url,urlencode(d)) #必须进行转码,否则无法获取到数据
34 response = requests.request('GET',url,headers={
35 'User-agent':ua
36 })
37
38 with response:
39 print(response.status_code) #打印响应的状态码
40 print(type(response)) #打印响应的response的类型
41 print(response.url) #打印最终响应的url
42 print(response.headers) #打印响应的头信息
43 print(response.request.headers) #打印发送请求的头信息
44 print(response.text[:200]) #当我们获取到的数据量比较大的时候,为了方便进行验证,可以将获取到的网页数据转换为文本格式并进行切片处理
45

urllib3使用池管理发送请求和requests常用方法的基本使用+session使用的更多相关文章

  1. angular post发送请求和GET发送请求,服务器端接收不到信息的问题

    参数可能因为编码原因,服务器端无法接收到传递的值, 这时需要用到补丁来解决这个问题 1,下载一个http.patch.js文件,放入YII框架中的js/ng文件架内 2angularjs 创建模型部分 ...

  2. 网络请求 爬虫学习笔记 一 requsets 模块的使用 get请求和post请求初识别,代理,session 和ssl证书

    前情提要: 为了养家糊口,为了爱与正义,为了世界和平, 从新学习一个爬虫技术,做一个爬虫学习博客记录 学习内容来自各大网站,网课,博客. 如果觉得食用不良,你来打我啊 requsets 个人觉得系统自 ...

  3. 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍

    第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...

  4. httpclient就是个能发送http连接的工具包,包括能发送post请求和get请求

    1.httpclient就是个能发送http连接的工具包,包括能发送post请求和get请求. http 连接一次就有返回流.http是个双向的嘛.只有连接了,就会有输出返回流. 所以在执行http连 ...

  5. GET 请求和 POST 请求的区别和使用

    作为前端开发, HTTP 中的 POST 请求和 GET 请求是经常会用到的东西,有的人可能知道,但对其原理和如何使用并不特别清楚,那么今天来浅谈一下两者的区别与如何使用. GET请求和POST请求的 ...

  6. Ajax中get请求和post请求

    我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1 ...

  7. slave IO流程之二:注册slave请求和dump请求

    slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...

  8. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  9. iOS开发网络篇—GET请求和POST请求

    iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...

随机推荐

  1. kindeditor富文本框使用方法

    这周我一共使用了两个文本框编辑器!我的上一篇文档讲的是wangeditor这个编辑器,现在就来讲讲kindeditor这个编辑器! 首先还是去它的官网去下载脚本! http://kindeditor. ...

  2. TVM适配NN编译Compiler缺陷

    TVM适配NN编译Compiler缺陷 内容纲要 前言 TVM针对VTA的编译流程 自定义VTA架构:TVM的缺陷与性能瓶颈 TVM缺陷与瓶颈 缺陷一:SRAM配置灵活性差 缺陷二:计算阵列配置僵硬 ...

  3. MindSpore 高阶优化器

    MindSpore 高阶优化器 MindSpore自研优化器THOR(Trace-based Hardware-driven layer-ORiented Natural Gradient Desce ...

  4. CodeGen字段循环Field Loop

    CodeGen字段循环Field Loop 字段循环是一个模板文件构造,它允许迭代CodeGen拥有的有关字段的集合.这些字段定义可以来自以下两个位置之一: •如果基于从存储库结构中获取的信息生成代码 ...

  5. 用户自定义协议client/server代码示例

    用户自定义协议client/server代码示例 代码参考链接:https://github.com/sogou/workflow message.h message.cc server.cc cli ...

  6. JVM集合之开篇点题

    大家在平时的开发过程中是否遇到过StackOverflowError.OutOfMemoryError等类似的内存溢出错误呢?大家又是怎么解决这个问题的?再来,大家在面试过程中有没有被面试官提问过jv ...

  7. perror()函数的使用

    perror()函数的功能是打印一个系统错误信息.        perror()函数在Linux系统中属于库函数,在头文件中有如下定义: #include <stdio.h>       ...

  8. RobotFramework + Python 自动化入门 二 (关键字)

    在<RobotFramwork + Python 自动化入门 一>中,完成了Robot环境搭建及测试脚本的创建和执行. 本节,对RobotFramework的关键字使用和查看源码进行介绍. ...

  9. 解决两个相邻的span,或者input和button中间有间隙,在css中还看不到

    <span id="time"></span><span id="second"></span> <inp ...

  10. centos使用yum安装docker

    1.先决条件 要安装 Docker 引擎,您需要 CentOS 7 或 8 的维护版本.不支持或测试存档版本. 该centos-extras库必须启用.默认情况下启用此存储库,但如果您已禁用它,则需要 ...