2020/03/29 03-urllib3和requests库使用

知道了,get,post,json请求返回来是什么样子,现在能用的方法就是get和post两种,对什么发起请求,返回的类型不知道,别人发的是http请求,但是返回来是application/json,是用json返回的。

https有些地方会出现问题,但是目前来看已经不是问题了
在这里插入图片描述
以前12306就是自建的CA,提示会不安全
在这里插入图片描述
**其实计算机系统有一些内置的证书颁发者,所以有些网站的CA才是可信的,全球的根证书认证者已经在我们的体系中,如果是这些,就是直接可信任,根证书的子机构,也信。
但是当时12306是自己给自己颁发的 **
在这里插入图片描述
现在就不是已经有人给它颁发了在这里插入图片描述
现在访问12306看看,现在首页被下载回来了
在这里插入图片描述
上下文在ssl里就等于create_unverified_context,不用校验的上下文
在这里插入图片描述
自己颁发的证书也会这样,就是你自己颁发的证书浏览器不认识,要么建立根证书,安装到当前计算机操作系统里,这样浏览器打开查到证书存在了,就信任了

访问是s,访问的时候就需要验证证书,看它这个证书颁发的机构是否可信的
在这里插入图片描述
在这里插入图片描述
这么访问就没有问题
在这里插入图片描述
百度证书是信任机构颁发的
在这里插入图片描述
ssl协议是要用证书来加密的,以前12306是自己签发的证书,我们的计算机是不信任的
在这里插入图片描述
会抛出这样的异常

在这里插入图片描述
可以导入ssl模块,调用不校验的上下文

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

常用的urllib3库

urllib3不是官方库,也就是不是标准库,这个库是由第三方机构编写的,在安装一些爬虫库的时候也会安装,这个库确实写的不错

在这里插入图片描述、
这样打开,去看httpbin下robots文件,看看里面的状态,数据

在这里插入图片描述
增强的东西,
1.thread safety 要是多线程,线程安全的。
2,connection pooling增加了连接池、链接复用
3。client-side SSL/TLS verification 支持ssl校验
4.file uploads with multipart encoding 使用多编码方式文件上传
5.helper for retrying requests and dealing with HTTP redirects 跳转的时候可以管
6.support for gzip and deflate encoding 支持加密压缩算法
7.proxy support for HTTP and SOCKS. http和socket都可以代理
8. 100% test coverage.
1,2,3是比较安全的

在这里插入图片描述
安装
在这里插入图片描述
看一下这个池

在这里插入图片描述
可以限定池的大小,header建立连接的时候要给一个header,里面的useragent要换
在这里插入图片描述
PoolManager是从requestmethods继承下来的在这里插入图片描述
建立一个容器,容器里,要把池的大小给它,最近使用的容器recentlyusercontainer
在这里插入图片描述
clear是把池子都清除
在这里插入图片描述
最重要的是enter和exit,enter是把自己返回去,
在这里插入图片描述
这样写的时候,就可以这么写,把自己的池管理器返回来
在这里插入图片描述
在退出的时候把自己清理干净了,返回了一个false

在这里插入图片描述
in-flight是正在用的时候,这里不会影响正在用的链接,但是在用完之后将不再重复利用,池子里全部清理掉
在这里插入图片描述
用完之后可以发起请求
在这里插入图片描述
发起请求,给方法,给url,header
在这里插入图片描述
用get方法,访问url,,愿意的话把headers定义一下,发起请求,最后返回是response
在这里插入图片描述
访问豆瓣有一个警告,没有校验https request,增加一个这样的请求,暂时先不管
在这里插入图片描述
这个类就是response下的httpresponse
在这里插入图片描述
好像封装了没什么太大变化,到这里看一下

在这里插入图片描述
它是直接自己重新构建了
在这里插入图片描述定位下是在urllib3 在这里插入图片描述
这就是response最后拿到的状态,理由,拿到headers
在这里插入图片描述
body构建的时候如果是这两种信息(basestring,bytes)就把body值给它
在这里插入图片描述
用data的方式可以把body信息return回来
在这里插入图片描述
在这里插入图片描述
现在就拿到了这些内容

在这里插入图片描述
这个库不需要下功夫研究,还有个增强版的库,requests,爬虫往往用这个库,这个库才是在开发中真正想要用的东西,从它来采集数据
在这里插入图片描述
定义了这么多东西

在这里插入图片描述
在这里插入图片描述
实际上想要用的requests类都在这里
在这里插入图片描述
用起来更加方便,把cookie都提取出来了

在这里插入图片描述
这是个演变过程,封装再封装,urllib-》urllib2-》urllib3-》requests

这些参数都是可以用的,每个属性传什么值都说的很清楚了
在这里插入图片描述
后面是可变关键字参数,header字典头信息,返回的依然是response
在这里插入图片描述
reponse已经告诉你有什么是那你需要关注的了
在这里插入图片描述
在这里插入图片描述
有这两个就可以用with
在这里插入图片描述
close调用的是这个方法。看到链接说明底层包装的还是socket链接
在这里插入图片描述
在这里插入图片描述
看下content和text是什么
在这里插入图片描述
最后相当于把值给你扔出来了

在这里插入图片描述
text文本有文本的用处,in unicode,要给你转
在这里插入图片描述
这里的content是局部变量,最后string用编码来转
在这里插入图片描述
content是二进制的方式,一行就过去了,这是bytes的
在这里插入图片描述
text就是爬过来的页面
在这里插入图片描述
这里没指定

在这里插入图片描述
号称是utf-8编码

在这里插入图片描述
需要指定编码,这是显示的100个字符
在这里插入图片描述
如果要保存一定要看一下是什么
在这里插入图片描述
看一下文件完全一致

在这里插入图片描述
text是个属性,本质上是个函数
在这里插入图片描述
这里内部用的encoding
在这里插入图片描述
上面的self就是response对象本身

在这里插入图片描述
如果编码不对需要切换它的编码,要看清对方编码,甚至可以强行改变编码
在这里插入图片描述
有些网站可能不带编码这时候默认是ISO8859-1这是拉丁

在这里插入图片描述
所以这两个编码需要一致
在这里插入图片描述
看一下session,可以用一个session的对象来解决访问的问题。

构建一个列表,可以用for循环起来,可以先创建一个session
在这里插入图片描述
看一下这个session是干嘛的,return一个上下文的管理器,下面Session是个类,所以session是Session类的实例,注意首字母区别
在这里插入图片描述
这就是session类的实例在这里插入图片描述
返回的是会话实例在这里插入图片描述
用这个session
在这里插入图片描述
看一下里面有什么东西
在这里插入图片描述
看到enter和exit,我们就可以继续使用with语法

在这里插入图片描述
使用了session,至少连续发送两次请求,看看headers有没有差异,因为搜索引擎最喜欢做set-cookie,这里有一个就是response里可以调用request,这个request就是Request对象
在这里插入图片描述
这里就有headers
在这里插入图片描述
属性里也有headers

在这里插入图片描述
res.headers这是回来的headers,看这两个区别,一个是请求头,一个是响应头,好像没什么大区别
在这里插入图片描述
跟百度建立会话后,下一次再请求的时候已经setcookie了,也就是下一次访问的时候cookie要带上,但是这里第二次请求的时候没有带上cookie,没带上是因为没有用session
在这里插入图片描述
这两个是普通请求,相当于访问完关闭浏览器再进行访问,相当于两次链接没有任何联系,服务器是用sessionid来认识你的
在这里插入图片描述
现在发起get请求,这个session相当于上面方法的快捷方法,这里就看到cookie了,因为上次set-cookie了
在这里插入图片描述
这里的id可以能是经过处理过的数据,这些信息里是带这个会话的信息,能够知道你上下两次是否同一个,这个id就可以帮助我们解决session是谁会话状态的问题在这里插入图片描述
这个session对象把这些值保下来,伪装成浏览器
在这里插入图片描述
普通方法相当于开了两次浏览器,用session就会把session和cookie保存下来,会在下一次请求的时候带上
在这里插入图片描述

我们要做的是在这里找到你要的数据,就需要dom树或者css选择器这样的东西,写正则表达式很累。
jquery不借助选择找到节点,不能把click事件绑定上去

在这里插入图片描述

一种是用re,css,还有就是xpath,三种方法偶都可以
在这里插入图片描述
开发中如果不用框架,大部分都是用requests来实现的,往往就是用session,set-cookie,保证连续性抓取,欺骗网站免登陆

发布了243 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_42227818/article/details/105188360