00:00
好了,然后咱们开始今天的课程,咱们今天来简单介绍一下request模块啊,这个呢,就是我们在这个Python的这个爬虫中经常使用的一个模块啊,我们首先新建一个纯Python的一个项目啊,名字之类的无所谓啊,解释器还使用以前这个啊,我们创建。好,然后呢,我们这个在这个爬虫的过程中啊,其实我们在上节课已经简单了解了一些基础知识啊,我们爬虫的一个流程是怎么样的呢?首先呢,我们比如说我们在这个浏览器上,我们打开一个网页啊,比如说我们打开了一个百度,那么当这个时候啊,我们这是一个页面,那么我们这上边呢,是一个这个表单,那么我们在表单里输入点什么啊,比如说这样输入点什么啊,那么这个时候你可以点击这个百度一下,那么百度一下这个按钮按下去触发这个功能呢,实际上是对表单的一个提提交啊,我们也称之为请求,然后呢,它发出请求之后呢,接这个发送到后端服务器上,服务器上会给你一个反馈,这个反馈的叫响响应。
01:11
然后他们中间通信的过程呢,有有一一定的这个,呃,数据进行了交流啊交互,那这个交互的协议呢,根据你的这个不同的需求也有不同的协议,比如说我们如果是网页的这种的,通常情况下我们使用的是HTTP和HTTPS啊,那如果说你有其他的一些需求,比如说你可以使用这种类似于SSH啊,或者说是这个呃,类似于FTP啊这些协议,那么我们在爬虫中呢,我们使用最多的呢,还是HTP啊和HTPS啊,那我们在这个使用过程中的HTP有一定的这个方法啊。它就比如说啊,有这个盖的方法,方法,Hand的方法和这个put方法啊,那实际上不止这些,应该还有delay的方法,这个什么much方法啊,还有这个delay的方法啊,这个content方法,Open方法,这些方法啊,他们的方法呢,就是各有各的不同啊,那像是我们在这个花虫中使用最多的方法呢,就是get方法和push的方法啊,这也是我们在网页网页的数据提交过程中啊,使用的比较频繁的这个方法,那你像是get方法,它的参数呢,其实就是在跟在后边的啊,比如说我们现在啊,我们点击这个百度一下,然后我们输入123进行百度,那么你可以看到啊,它这个百度啊,这个S问啊,Sone号后边啊有很多很多的东西,这部分呢,都是什么,都是参数啊,那我们啊,这个问号后边的部分就是参数,前边的部分不是啊,那比如说它后边有一个这个IE啊,等于这个UTF8,那这个很明显就是一个编码,那后边这个还有一个F等于八,然后呢,这个呢,还有什么这个BP等于一啊,然后什么这个ids等于一啊,这个什么T。
02:47
N100这些还有WD12啊,这些是都是一应的啊们都是这个数啊,那像是我们搜索的内容很明显啊,你可以看到这儿有一个WD等于这个123啊,那这儿呢,如果说你不确定是它,你觉得是巧合,你可以再搜个456啊,你看W等于456啊,所以说呢,这个东西呢,这个WD这个啊,就是我们要找的东西,这个时候呢,你也可以直接啊把它比如说啊留只留下这个456啊,其他东西都删掉啊,然后你回车,诶,你搜索之后你发现啊,只有这个W等于456,它也是能达到一定的这个效果啊,那么说明什么呢?说明我们在写爬虫的时候,你只需要给它传一个W等于456的一个参数就可以了啊,其他东西其实是呃,无所谓的。
03:33
那么这个呢,就是一个简单的HTP和HTPS的这么一个协议的简单的这个介绍啊,然后前边其实你复制出来,你可以看到它这个协议是隐藏起来的,默认的啊,然后呢,我们上节课也介绍了他们使用的是什么端口,以及状态码的一些基本信息,那今天呢,我们就来简单的写一些代码,然后来给大家来介绍一下,在我们写这个代码的过程中呢,我们实际上可以用的模块不止一个,比如说我们可以这个RPRT啊,然后使用这个UR lab,那你这个UR lab里边呢,它有一个这个方法叫做什么呢?就叫做这个,嗯,应该是有一个这个呃,URL,嗯,是open,嗯,不太记得了。
04:14
那算了,我们还是用这个,我们今天主要讲的这个吧,我们用request模块啊,然后它这个模块呢,我们需要给他安装一下啊,点击安装。然后我们等待他一下啊,你可以看到现在啊,右下角已经有一个已成功安装软件包的这个提示了,那么现在我们就已经可以使用它了,Request模块呢,它可以提供你常规的这个各种HTP可以使用方法,比如说你可以使用这个get的方法啊,你也可以使用这个呃,Push的方法,还有嗯,点错了啊。Push的方法啊,还有这个类似于什么铺的方法,哎呀,我老老老手欠了这个东西。
05:03
然后还有delay的方法。嗯,还有方法。Ocean方法啊,这些呢,都是一些我们HP非常常用常见的方法,但是我们在用的过程中呢,这些东西实际用的比较少,我们主要还是使用前两个get和put啊,但是呢这呢就是告诉大家一下,我们实际上是有这些东西的啊,用不用另说啊,我们先要知道它有啊,那这些呢,我们先注释掉,我们先用一个get方法来进行一个使用啊,那首先呢,我们要给他传的参数呢,就最简单,最简单的情况下,你只需要给他发送一个什么呢?发送一个啊HTTPS啊,冒号啊杠杠啊,3W点百度点com啊这样最简单的情况下,你这样就行了,为什么是这样呢,而不是说要话可以把前面这部分去掉呢啊,等会这个写反了。这样啊,然后这个为什么说不可以直接是3W点这个百度点com就行了,这个其实咱们上节课已经解释过了啊,你前面这部分指定的是你用什么协议去访问啊,如果你直接用后边这个东西的话,实际上是它是没有办法去这个识别的。
06:15
然后呢,我们现在呢,已经把他们这个呃填进去了,填进之后使用一个get方法进行访问啊,然后request呢,它这个get方法呢,会返回一个东西啊,那这个东西呢,我们可以称之为这个request的一个res啊,然后呢,这个Rex返回之后,它里边有非常非常的多的东西可以供你访问,比如说你可以直接print一下这个re啊,我们首先先访问这个打印一下res,你可以看到它这是写了一个这个200的一个返回值啊,那这个200的返回值实际上是一个什么东西,实际上它就是它的一个这个状态码啊,就是它的一个状态码,那么它这里边呢,实际上包含的东西不止这么少啊,东西非常非常多,只是说呢,它这个在直接打印is的时候是比较少的,那比如说你只打印这个test,这个时候你再去运行啊,你可以看到这是什么东西啊,这个东西实际上就是它的返回的,返回的数据啊,返回的数据,比如说你现在呢,这是一个这个我们现在要访问这个百度啊,那我们直接F12先把这个网络这个调出来啊,调出来之后呢,我们现在进行这个点击一下这个百度这个页面。
07:16
那此时时刻你可以看到现在有一个包啊,然后它现在就是有一个请求的一个网址,然后请求之后请求的方法是一个盖方法,状态码是200,表示成功远程地址,IPA地址和端口号,因为它是HTPS协议,所以使用的是443端口,如果是HTTP协议,它会使用八零端口啊,这是它的一个区别,然后底下呢,是一些响应的一些这个标头,然后底下呢是想请求的一些标头,那么我们可以直接往后看,看一下它的这个载盒啊,载盒里边呢,我们现在呢,要看的这个其实没有什么太多的信息,这底下这些东西实际上都是它的一些广告的一些东西啊,你可以看到,然后呢,我们在预览,预览里边呢,这个是什么东西啊,这个是它的一个这个返回的一些这个数据啊,返回的一些数据。然后呢,我们这还有一个响应啊,这个是以这个摘闪形式啊,来这个响应的一些东西啊,那么这些东西呢,实际上都是由什么呢?都是由它的返回包构成的,那我们在这边啊,打印出来的东西,实际上就是他访问请求回来之后响应出来的一个这个HTM代码,因为什么呢?因为我们在访问百度这个网址的时候,它是回给我们回一个回一个,它是什么呢?是为了把我们当前这个页面给我们制出来,那我们这个页肯定是HHTS,可以看到一些事情,就是它里边的东西实际上是不太对的,你包括这个位置上,你可以看到这个class lab后边呢,它这个东西是乱码,这个位置上它也是一个乱码,这是因为什么呢?是因为我们T的这个东西啊,它本质上而言,虽然说可以帮助你显示出它返回的这个响应包,但是响应包里的东西,它的编码啊,是来通过。
08:58
的推测得到的,也就是说服务器返回一个东西啊,然后你的Python啊,你的test request,一个test,他去自己猜一下他访问的回来的编码是什么,那这种情况下呢,就比较尴尬,因为它是有时候会解释错啊,那么我们可以怎么做呢?比如说我现在我我就知道我这个东西应该是用一个UTL8回来的,那么这个时候你可以用你的这个Rex里边有一个方法叫做encoding encoding呢,实际上就是设置你要用来这个解析的这个编码,比如说我们最常见的就是用一个UTF8啊来进行一个设置,设置完事之后呢,后续啊,你再去用它这个解析的时候,它就会解析出一个UTF8的一个编码,你看直接一回,诶等一下我看一下啊。
09:40
Encoding。啊,不对啊,这个encoding不是个方法啊,我想起来了啊,它要这样啊,等于设置它是一个属性啊,啊,我刚才写错了啊,UTL8啊,然后我们回这个运行一下啊,这个时候你再看啊,你看这有贴吧有登录啊,然后这些中文字串啊,你可以看到啊,还有这些有一些部分英文字串已经变成了这个正常的,你看地图啊之类的东西,然后这些东西呢,现在就已经正常了,就说明我们设置这个东西已经成功了啊,那这个呢,只是其中的一种方法啊,我们使用了q encoding和这个test进行联合打印啊,那实际上而言,我们也可以用直接一句话啊,把它们解决掉,就是什么呢?因为他回来的时候实际上是一个字节流,你可以也可以说它是一个二进制的一个包啊,那么这个时候你用这个repair里边的一个叫做这个content啊,Content就可以直接对它进行一个打印,打印之后你可以看到它里边除了这个关键字之外的这个编码呢,都是以一种这个16进制的形式啊,来进行这个输出的,那这种呢就是资金流。
10:44
啊,那如果你想把解析出来呢,可以用自接流count里边的一个抵扣的这个方法,这个抵扣的方法实际上是用来设置这个编码的,你可以直接设置成UTF8啊,你也可以直接用它的默认值啊,正常情况下默认值就是这个我们想要的,然后你直接再回车,再打印,你可以看到显示的内容呢,相对而言呢,也是正确的,跟刚才呢没有什么区别,这两种方式呢,都是可以的,但是呢,这里边儿有点小问题,小问题是什么呢?比如说我现在我这个。
11:12
访问回来,这个代码我们不是已经拿到了吗?那这时候我用一个商业管理器啊,Request啊,然后open open一个HT啊算了,就叫什么呢,叫做我们这个是res啊res1.html,我不是返回了这些HTML代码吗?我直接给它写到文件里去啊,然后呢,我用一个WB啊进行一个这个,我想想我用WB还是用什么东西进行一个写出呢?我就我就用WB吧,然后呢,写个别名SF,然后接下来啊,我们进行写出f.Y然后我们写写什么东西呢?就写我们的这个。Request the content啊,我们进行写出啊,直接CTRL加F10我们就写出去了,写出去之后呢,我们看这啊,我们多出来它这个文件啊,我们打打开啊,你可以看到它就这么点东西,然后我们通过谷歌浏览器将它的页面打开啊,理论上而言,我们爬回来这个东西啊,非常非常的正常,对不对,但是实际上不对啊,为什么呢?我们右键啊打叉开网页源代码,你看它代码就这么几行啊,那么我们现在来看一下真正的百度,百度啊它长什么样,我们查看完了源代码,你看到没有这么多这么多东西啊,有这么多的东西,那为什么我们同样都是通过这种HTPS协议进行百度的这个网址的一个访问,那么我们得到的东西不一样呢?这个其实呢,就涉及到了我们这个反扒的一些机制啊,就是首先呢,我们百度肯定是有反扒虫的啊,跋竟这么大一个公司啊,不可能说这个一点防护措施都不做啊,那他就做了啊,但是呢,他没有做那么彻底,比如说你如果要访问他的主页的情况下,它是允许你访问的,但是访问的是返回的东西是假的,那有一些网站呢,他对于你反扒呢,你直接。
12:49
那么访问上去,它返回的东西呢,就是啥也没有啊,那是为什么呢?这个东西呢,实际上就是你的一层这个皮在作用呢,什么叫一层皮呢?比如说我们现在运行一下啊,然后呢,我们拿这个包,包完之后呢,我们看标头,标头里头啊,你看到之后这个位置上有一个叫做user agent的一个东西o user agent的这个东西呢,实际上就标注了你到底是谁啊,你是个什么,什么样的这个浏览器,什么样的主机啊,那么我们可以看到我现在这个位置上写的是Windows nt10.0啊WINDOW4X64版本,然后后边呢,还有一些这个相关的一些信息啊这些东西,那么我们有了些东西呢,它呢,这个百度呢,就就决定我们是个真的东西啊,否则呢,我们他觉得我们这个东西呢,就是在爬东爬它啊,那它就返回个假的,那我们现在呢,就应该给他干嘛呢,复制出来,然后呢,设置一下啊,设置一下它的user agent,让它这个能够正常啊,比如说我在这儿使用之前,我这get之前,我应该啊给它啊设置一下啊,当然不是这么设置,我们比如说我用一个这个。
13:49
啊,等于啊,我们要给它改成字典的形式啊,就比如说我现在前面不是有一个这个,我我这么写吧,啊,我这么写不太对啊,我直接啊,我重新复制一下吧,这个复制的有点不对啊,有点乱。
14:05
首先我们把这个user拿出来。然后呢,我们给它保存成一个字符串,就是agent,然后我后边加不加冒号啊,不加这样,然后后边呢,还是一个字符串啊,就把后边那部分信息啊,我们也给包进来。好,这部分信息我们也包进来了,包进来之后呢,我们现在就可以使用它了,使用之后呢,我们现在呢,这有个哈ers嘛,我们在它的get这个方法里还可以给他提供啊,你看哈斯啊hands,但是你后面忘忘写都逗号了啊,然后哈等于等于什么等于哈斯啊,就是我们这个指定了一下,我们代理,指定完代理之后呢,我们重新再次运行这个代码,然后呢,我们再打开这个res1.sh啊这个atml你可以看到啊,从这个十几行代码现在变成多少了。是不是已经非常非常长了,看1558行代码,这个才是啊,百度真正的啊,真正会返回的一个东西,而我们刚才返回这个东西实际上是一个假的啊,是一个假的,是白宫提供给你的啊,那么这个呢,就是我们最基础最基础的啊,这个爬虫它是如何去这个使用的,那么我们还可以在里边获取一定的信息啊,比如说我这个东西我注释掉,我们刚才呢,只是说啊,去打印到它返回的一个包啊,我们如果要解析包呢,后边呢,我们需要学习正则表达式,但是我们能打印的东西就这么点儿嘛,也不是啊,我们能够看到的信息也非常非常的多,那比如现在呢,我们看到的只是它返回的一个包的一个基本信息啊,那我们还可以干嘛呢?还可以,比如说我们还可以放看到它的这个响应头,Re res啊,点这个哈,啊这就是它的响应头,然后呢,我们再来看我们还可以这个,嗯,看他的这个情状态码,还可以看他状态码啊这两个东西我们。
15:58
先看一下。啊,你看啊,这个请求头啊,就是上面这个玩意儿啊,这个里就是他的请求的一个头啊,然后这个底下这200呢,就是它状态码,表示它是一个成功的,这都是响,这个不是请这个,这个是响应的这个状态码啊然后接下来呢,我们还可以看什么呢?就是他请求的这个包啊,就是请求的我们发出去个包长什么样,比如说啊,我这个请求的这个。
16:21
东西啊叫做request啊,那我们直接可R f10看一下这个request啊,你可以看到长成这样啊,这里边呢,就写了一个盖的方法啊,那说明信息不详细呗,那我们实际上可以看得更详细啊,就是我们这个。哦,我直接复制一下吧。好,这里边呢,实际上可以看到的东西比较多,比如说我们啊请求的URL,或者说啊,我们这个请求的hand德S,然后呢,还有这个我们的这个body底啊身体啊,这个就是请求体的部分,然后呢,还有什么呢?还有这个协议的部分啊,这些东西啊,我们直接啊,啊不是协议方法的部分啊,然后你可以看到这个URL就是什么,就是这个HTPS3W点百度点com,然后后边呢是use a'就是S这个body呢,因为没有他写了一个now啊,然后最后呢是一个方法啊,你可以看到是以这个get方法进行发出的啊,那这个呢,基本上就是我们常用的一些这个信息,那除了这些常用信息之外呢,我们这个东西呢,很明显是一个没有参数的这个爬虫啊,什么叫没有参数,就是我们直接访问一个静态页面,然后回来的这么一个爬虫,那我们上节课在这个基础里给大家这个看,那个爬虫它是有一定参数的,那如果有参数我们应该怎么写呢?其实呢,也很简单啊,也很简单,我们首先呢,比如说我们因为百度。
17:37
库,它其实是带一定反扒的啊,如果你直接用WDWD,然后等于什么这种你可能反应就反访问不出来啊,我们用自己的官网啊,这个官网来看一下,比如说我们现在啊进行搜索啊,我们搜索121231回车啊,你看这里边啥也没有,但是呢,它上边有这么一个一个连接啊,它这个参数里头有一个查询问号,Q等于123,然后type等于什么,那我们把这个type什么等于什么我们去掉,你看这个Q等于123,实际上能达到一样的一个效果,那么这个时候其实就好办了啊,比如说我们啊现在呢啊,我们上面这东西等会注释一下啊,我们首先还是要来这个写一下我们的这个is啊等于request.get get,然后呢,URL呢,我们直接啊把这个放进去,放进之后呢,我们以为问号作为截止后边的参数,我们不写进去啊,我们参数是怎么写呢?我们参数是一种字典的形式啊给传进去,这就涉及到get的方法的另一个,呃,另一个特点了啊,我们P。
18:36
AMS啊,然后等于啊这样,然后我们这不是Q等于什么吗?那首先就是Q冒号,然后等于什么后边写上,比如说等于这个hello啊,那就这么写,然后呢,它里边呢,有一个参数,刚才不是有一个hand嘛,这个hand我们在这儿我们也要给它加上啊,因为我们自己的也认啊,完了我们加上hand hand之后呢,我们再加上它的参数等于啊。等于我们自己刚才填的参数,这样呢就有参数了,参数之后呢,会像我们刚才访问一样拼接在后边,好,那么接下来呢,我们把上面的东西呢,给它简单注释一下啊这些东西啊。
19:21
好,我们给它注册好了,注射好之后,诶上面还有二一啊好,我们注册好之后呢,现在呢,我们不是已经访问出去了嘛,带参数的访问出去了嘛,然后呢,我们现在不是要让他回来吗?回来的时候我们首先上,比如说我们设置一下res,点这个ncoding啊,给他设置成这个UTF8,哎呀,点错地方了。UTF啊,然后呢,设置完UTF8它这个解析编码之后呢,我们接下来呢,我们不给他打印了,我们就直接给它存起来啊。我们取个res2.html啊,然后以这个。
20:00
WB啊,写二进制的形式啊,打开,然后SF f.Y啊给它写出去,写出去呢是用re ex.content。好,这样就写出了啊,返回访访问的东西就返回就写出了,然后现在呢,我让我们来这个运行一下,运行之后结束了,你可以看到这多出了一个res2.htmmr我们点开,点开之后我们右键啊,啊不用右键我们直接点击这就行,谷歌啊浏览器打开之后,你可以看到现在就是我们访问之后它的这个东西啊,这个你看hello,我们这个参数也传进去了啊,然后直接就打开,然后就是得到它这个返回的一个结果了,接下来呢,如果说比如说你这儿是找到东西了,你就可以通过一个正则表达式对它呢作为一个解析,然后拿到你想要的一些数据啊就可以了啊,那这个呢,就是带参数的这个request啊,是如何使用的啊,那我们今天呢,这个要讲的内容呢,就是这么些啊,两种方式,一种方式呢是通过这个呃,Get直接去访问它,但是呢,要解决他的一个问题,也就是说要使用一个user进行一个代理,还有呢,就是如果它有参数的情况下,我们如何把它的参数传递进去啊,然后这个呢,就是我们今天的一个主要内容啊,如果有问题呢,现在可以问。
21:14
啊,如果没有问题呢,我们就换助理回来了。
我来说两句