urllib3使用池管理发送请求和requests常用方法的基本使用+session使用
使用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使用的更多相关文章
- angular post发送请求和GET发送请求,服务器端接收不到信息的问题
参数可能因为编码原因,服务器端无法接收到传递的值, 这时需要用到补丁来解决这个问题 1,下载一个http.patch.js文件,放入YII框架中的js/ng文件架内 2angularjs 创建模型部分 ...
- 网络请求 爬虫学习笔记 一 requsets 模块的使用 get请求和post请求初识别,代理,session 和ssl证书
前情提要: 为了养家糊口,为了爱与正义,为了世界和平, 从新学习一个爬虫技术,做一个爬虫学习博客记录 学习内容来自各大网站,网课,博客. 如果觉得食用不良,你来打我啊 requsets 个人觉得系统自 ...
- 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍
第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...
- httpclient就是个能发送http连接的工具包,包括能发送post请求和get请求
1.httpclient就是个能发送http连接的工具包,包括能发送post请求和get请求. http 连接一次就有返回流.http是个双向的嘛.只有连接了,就会有输出返回流. 所以在执行http连 ...
- GET 请求和 POST 请求的区别和使用
作为前端开发, HTTP 中的 POST 请求和 GET 请求是经常会用到的东西,有的人可能知道,但对其原理和如何使用并不特别清楚,那么今天来浅谈一下两者的区别与如何使用. GET请求和POST请求的 ...
- Ajax中get请求和post请求
我们在使用Ajax向服务器发送数据时,可以采用Get方式请求服务器,也可以使用Post方式请求服务器,那么什么时候该采用Get方式,什么时候该采用Post方式呢? Get请求和Post请求的区别: 1 ...
- slave IO流程之二:注册slave请求和dump请求
slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...
- (转载)JAVA线程池管理
平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...
- iOS开发网络篇—GET请求和POST请求
iOS开发网络篇—GET请求和POST请求 一.GET请求和POST请求简单说明 创建GET请求 // 1.设置请求路径 NSString *urlStr=[NSString stringWithFo ...
随机推荐
- RGB-D相机视觉SLAM
RGB-D相机视觉SLAM Dense Visual SLAM for RGB-D Cameras 开源代码地址: vision.in.tum.de/data/software/dvo 摘要 本文提 ...
- TensorRT 数据格式说明
TensorRT数据格式说明 NVIDIA TensorRT支持不同的数据格式.需要考虑两个方面:数据类型和布局. 数据类型格式 数据类型是每个单独值的表示.它的大小决定了数值的范围和表示的精度:分 ...
- YOLO3升级优化版!Poly-YOLO:支持实例分割!
YOLO3升级优化版!Poly-YOLO:支持实例分割! POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATI ...
- Redis系列(二):常用操作
一.数据类型 如果学过数据结构就会知道,操作往往是在特定的数据结构上的,不同的数据结构就会有不同的操作,Redis支持以下的数据类型: 字符串(Strings),列表(Lists),集合(Sets), ...
- python 数据写入json文件时中文显示Unicode编码问题
一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...
- 重新整理 mysql 基础篇————— mysql 事务[三]
前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...
- 【C++】类
一个简单例子: 1 //c++ 类 2 #include<iostream> 3 using namespace std; 4 class Point 5 { 6 private: 7 i ...
- Spring Cloud Gateway简单入门,强大的微服务网关
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 见名知义,Spring Cloud Gateway是用于微服务场景的网关组件,它是基于Spring WebFlu ...
- 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...
- 【linux】驱动-15-定时器
目录 前言 15. 定时器 15.1 内核函数汇总 15.2 内核滴答 15.3 相关结构体 15.4 setup_timer() 设置定时器 15.5 add_timer() 向内核添加定时器 15 ...