00:00
OK,同学们,那么接下来啊,我们要讲一个未来大家在爬虫中应用到非常非常广,非常非常多的一种需求啊,这种需求呢,我们可以这么讲吧,就是将来你在很多的应用场景上都可能会用到了,呃,那我不知道各位同学之前在有没有用过迅雷来下电影啊,那之前呢,我们都可以在这儿去下电影的啊,电影天堂啊是专门为迅雷下载的,所以说有一些比较新出来的电影还没上映对吧?那我们就是可以在这儿能看到我们点一下国内电影。那这个需求是啥呢?对吧,这个需求是啥呢?我要最终啊同学们一会儿我们不有一个it吗?是不是我们在SCP里边有个数据结构的一个东西啊,定数结构啊,It里边我现在想要的数据是我们当前这个页面的啥文件的名字,测谎人这个文件的名字,以及要他啥呢?他点进去第二页的这个图片的地址,我把这两个定义为啥。
01:10
定义为一个item对象,哎,这需求就是也就是说一层套一层,再套一层,以此类推,一定无限的嵌套,明白不?各位诶,我记得之前我们爬过国家统计局的一些数据,那么国家统计局的数据大概当时有68万条,都是一层套着一层套一层,大概在六七层,而当时候,当时我们就可以使用这样一种策略去解决它啊,这样一种策略解决它,好,同学们,那现在我们来创建一个新的项目,完成这个功能。来来打开CMD,然后现在呢,我们要跳转到哪儿呢?跳转到我们的这个目录下。好在这里边回事,OK,那我们要创建一个什么,同学们是不是要创建一个项目啊,好,Sc start project,然后写上SCP,然后叫movie吧,好吧,然后099 OK,同学们,这个项目我们创建完了,创建完之后大家看啊,这里边儿就能有看到了,对吧?诶看到了。
02:19
那这里边儿其实我们就讲一个东西嘛,对吧,就刚才这个需求没有什么其他的需求,还算简单,那这个事儿我们应该怎么去处理呢?我们应该怎么去写呢。对吧,别着急,因为你这里边啊,还没有的一个文件吧,爬虫文件吧,那我们就得找找啊,我们的首页是他吧。对吧,我们的首页是不是他呀,我先检测检测一下呗,检查一下呗,来network,然后刷新。好,同学们index看是不是它,嗯。好,不出意外的话,这个结构它看着像,对对吧,好OK哈,那就是它了。
03:01
我来访问一下这个好,那我们接下来啊,要跳转到这个哪啊SC,然后是movie,然后Y,然后spiders。好,这个目录,这个目录呢,接下来我们要创建一个爬虫文件,咋创建来着,是不是j spider是吧,起个名MV啊,然后呢,把这个地址给他粘贴过来走。好,创建完了,创建完之后呢,现在我们来看一下它有这个东西了,有这个东西的时候大家先别着急,我不知道他做没做反扒吧,是吧,各位,所以说在这儿呢,首先我要把它干掉,最后这个咱们为了验证之前我们说的是准确的,所以说在这你给它运行,你发现嗯还是不好使的,那就是因为啥呀,因为这个盖听懂了吗?各位,哎,这个千万千万,我们在爬虫的时候要注意啊,这个小坑点,然后紧接着呢,我们也先别着急写,我看做没做什么反扒。
04:05
对吧,然后来运行一下它scra,然后加上啥呢?MV。走好,看一下有没有这个数据啊,OK,有没有,各位至此没没做什么反弹对吧?好,同学们,那么接下来我们就开始来写这段代码了,那这段代码要干什么呢?我们要要啥呢?第一页的名字和第二页的图片,大家能理解我的意思吗?哎,你要懂啊,所以说在这呢,我先写个pass吧,哎,省着来报报错是吧,我现在哪同学们我在it里边。啊,在items里边我定义两个东西,第一个我定义叫name啊,是名字吧,script.field第二个我们要定一个地址scriptp.field它俩,哎,一会我们要访访问它俩是吧,然后呢,我们可以把它下载下来啊,把它下载下来,这就是我们想要做的啊,想要做的好,同学们,那现在我们应该找到这两个东西呀。
05:16
对吧,好,那就得分析目录结构了,来右键检查它。这是hif,包括这里边儿的字,诶,那也就是说点击它这个应该是第二页的一个地址吧,我右键来打开一个哈,是不是第二页的地址啊,对吧,各位,所以说现在我们要做什么,同学们你要啥呀,你是不是要获取它的内容,也要获取它的内容,获取它之后再对它发送请求,并且获取源码之后再解析就可以了呀。同学们能理解我的意思吗?在这块千万千万要知道我刚才说的是啥,首先我要获取它的内容,这是我想要的一个找到了,第二个在哪里呀,第二个是不是在这个地址里边啊,对吧,各位我们一点一点来啊,一点点来。
06:11
好,同学们,那么接下来我们就来找他,那这个他的地址是谁呀,我就得找找啊,这里边是不是u table table table的上边是呃,Co,然后CT8对吧,对,好,所以说在这呢,那你看下边不一堆table嘛,所以说我就找table上面的呗,Ctrl shift加X来写上杠杠。杠杆杠杆谁呀?杠杠div,然后写个at class等于谁等于Co contain8等于它,它下边的谁呀?同学们,我可不可以它下边谁?Table下边的TD第几个TD呀,第二个TD里边的第二个A吧。
07:01
对吧,第二个TD里边TD第几个呀,第二个第几个A呀,是不是第二个A呀。对吧,各位,第二个A,第二个A是不是就找到它了呀,那里边的test那就是名字呗,然后这个A的艾特h ref就是它的链接地址呗,明白吧各位,哎,所以说在这呢,我们就可以找到A,通过A之后我再去找到他俩好同学们,那么现在我们来写上。第一个写上叫A,下写例子,我找的是A啊,Response,点叉pass在里边写谁呀?写A的地址,那么既然我遍历一下a for a ina list对吧,那我一为啥我这么做哈,因为刚才同学们你看到了我h re EF和这个test的是不是都通过A拿到的呀?所以呢,他这个select的对象,我是不是还可以进一步查pass啥写啥点盖是不是要test内容啊?
08:07
对不对,那这个我们获取的是啥?是不是name啊。是不是啊,然后来因为十来个对象,所以说我要提取它吧,First没问题吧,各位,哎,所以接下来还有个h hi EF等于A点叉pass对吧,那它是啥呀?点干爱它h hif,这多简单呢,省着我们再去判断它的长度那种操作了吧,诶我们这就有了,那这有之后呢,我们先别着急,我们打印一下name逗号hif对吧,我们先打印一下它,看看有没有这个数据啊来走你。啊,最大化一下。如果说这里边稍微有点卡,我们也可以接受哈,因为网络的问题哈,来看拿没拿到啊,诶名字地址是不是也拿到了各位,诶拿到了,拿到之后我们接下来要干啥?这是获取写上注释啊,获取第一页的name和要点击的链接吧,对吧,大家那你要点击第二页的这个链接,这个链接长这样吗?不长不长的话,它前边拼了一个啥东西啊,是不是HTTPS3W点电影天堂8.net,然后拼上了这个hif各对吧,各位好,所以说在这里边我们的第二页的地址写上啊,第二页的地址是。
09:43
谁叫做URL等于HTTPS冒斜线叫啥来着?电影天堂八有没有3W?来看一下,别写错这个啊,3W点电影天堂8.net,要拼它来写上3W点电影天堂8.net,然后加上谁呀hif。
10:10
那hif明白各位,这就是我们的第二页的地址,我们来打印一下它啊,看可不可以走,嗯,好,同学们。看一眼。嗯,稍微有点慢,稍微有点慢啊。看打没打印呢,我随便找第一就找,别随便了找第一个我们知道它长啥样是吧?来复制一下它在这来粘贴走,你是不是他呀,各位,所以说我也找到了第二页地址啊,但是接下来问题就来了,说呀,你这第二页地址找到之后,你要干啥,你要干啥。你是不是要对它进行访问,访问之后呢,你还要干啥呀?对,咱得先得先访问嘛,对吧,怎么去访问呢?同学们,我告诉各位同学啊,接下来就要做的是对对第二页的链接发起访问,访问之后我们再说别的事儿,对吧?咋访问呢?上个小案例,这个当当网我们讲过,咋写咋写来着,是不是yell的,然后SC什么点request第一个里边是不是要访问的地址。
11:28
对吧,等于YL,那么第二个里边这call back呀,同学们你要注意了,你这把你还能去访问它吗?你能访问它吗?是不行了,因为这里边的解析逻辑和之前不一,和之后的不一样啊,那注意了,同学们,我可以自己去写方法pass下线second,我自己写的没有这玩意儿,那我定一个呗,来pass。Pass_second那我自己写一个方法对吧?哎,方法我要模拟谁呀,模拟它。
12:04
那self有了是不是还有个response对吧,各位,那我看这里边我能不能打印呢?对吧?打印一下打印谁呀?打印一个1234567890行吧,打印一个比较特殊的,我看进没进来啊同学们来看一眼。走,看进没进来,能不能让我们去执行,也就是说刚才我们写的代码可不可以。对吧,如果不可以,大家猜一下为什么有吗?有1234567890吗?有吗?是不是没有?那为什么没有呢?你现在这段代码报错了,他都看到你了,为啥呀。同学们,你这段地址我给你粘过来啊,粘过来我刚才粘了一个地址吧,好是它吧,这段地址在允许访问的路径里边吗。
13:04
在吗?是不是不在呀,所以说大家注意啊,你这里边之所以没执行,是因为你allows这个范围太小了啊,不允许写,所以说为啥一般情况下我们都写域名呢,就在这儿了。啊,就在这儿了,听懂了各位这个千万要注意啊,因为你这次访问的地址不在允许访问的域名之内,所以他才没给你执行啊来现在我们来运行一下走。嗯,我们再来看一眼,说这把有没有给我们打印看看,看看是不是打印了好多次啊,各位每个对象来都给我打印了一次,每个都打印一次,所以说同学们注意,这就OK了,进来了,那你进来之后同学们你要干啥呀?啊,同学们你要干啥呀,你是不是要解析到什么,解析到那个图片的地址啊。
14:03
对吧,各位,所以说接下来我们点进来对它右键检查对吧,点进来是不是要它了,好同学们,你为啥有他,因为你这里边有response,这response就是啊啊这一点问题没有啊好接下来我们看一下这两哎一下我就看到ID了,这地址不是他吗?就它吧,哎,Zoo母祖母下边的SPA下边是啥妹子来走。Div艾特ID等于等于啥?是不是等于zoo母大写的Z啊B给我写错大写的z z OM zoom只有一个zoom下边的SPA下边的谁下边的以image是不是只有一个,我要的是image的啥?艾特src看到了不位这地址是不是我们想要的?来走你访问它没毛病啊,对吧?各位,所以说此时此时它就是我们想要的。
15:02
它就是我们想要的,咋来呀?Src等于啥?Response点叉pass里边来了,这里边儿注意啊,同学们叉pass你还要注意啊,它返回的是一个select,一个列表,而列表里边我们要的提取的是不是里边的数据呀,对吧?各位来打印下src,看是不是我们想要的啊,来运行它走,我们来看这里边有没有解析到第二页的这个数据。对吧?如果解析到了,我们剩下来干啥了?来看怎么了?同学们怎么全是难呢?啊,怎么全是难的,这也没有给你数据吗?你看是不是全是难,那为啥呀。想想呗,为什么现在没没有结束啊,结束的时候我们再再说,稍等。
16:00
因为它每一页打开第二页的这个时间太长了哈,后期我们会做优化啊,同学们这个不要不要着急啊,就为什么现在他没有给你数据呢,咱就得想想对不对,那第一反应同学们我再运行一下啊,刚才有点有点慢啊,再第一反应是啥。告诉各位同学,你的第一反应是啥?啊,你的第一反应是啥?你看这把完事了,所有的给你的都是谁,都是难,没有没有,我告诉各位啊,这个时候我们第一解决的策略是要干什么,是要观察它有没有问题。我们刚才写不没有问题吗?那为什么这把就有问题了呢?对不对,你这个div中母写错了,10万写错了,还是谁写错了?对吧,各位同学们注意啊,所以说呀,这里边啊,如果说有问题了,一定是谁呀,一定是他的问题,为啥呀,因为我们进来了呀,对吧,所以说大家注意啊,在这块有个点,这个坑点是谁呢?大家注意,虽然我们在这儿写的一点问题都没有,但是对不起,它识span识别不了啊,识别不了就有些标签它识别不了的,这没有办法,你只能通过啥呢,一点点去试,去猜,去测啊注意你看现在把死绊去掉,我们再来运行一下它。
17:26
再来运行它来看跟刚才是不一样了吧,同学们是不是结果不一样了,我们随便找一个来复制一下它。对吧,我们把这个再打开一个新的地址来走,你看拿没拿到啊,人潮汹涌,明白了各位,所以说当这个时候他就打的就有问题了。对吧,你就干啥检查失败,注意啊,注意同学们注意,如果拿不到数据的情况下啊,拿不到数据情况下一定要干啥,一定要检查你的叉pass语法是否正确,这是第一个你要做的事。
18:10
啊,第一个你要做事,所以说这块非常重要啊,但是现在有一个小问题啊,同学们,你在上边能打印name,你在下边能打印src啊,但是我们现在的内和FR能在一起吗?能吗?是不是不可以呀,各位。对吧,那我怎么才能做到这件事呢?诶,这里边大家注意啊,我们看一下request里边它有没有什么东西啊,它有一个属性叫做啥叫Meta。这个Meta属性我们可以用,用它来干啥呢?大家来往下再找找Meta属性是一个什么?是一个字典dit,那是一个字典被强转成字典类型了,那它有啥作用呢?大家看啊,大家看,在这里边有个Meta属性Meta。
19:05
这个麦查属性,它可以变为一个字典,我要将谁呢?我要将内,也就是说你真正上边这个内幕给它干啥,传到这里边儿去。明白不?哎,把Meta属性给它传到这里边去,传到里边我是不是得接收一下。对吧,咋接收啊,Name等于response点儿。然后在里边我写一个name,这个name就获取到了,就相当于把它传递给他了,对吧,各位,诶这是接收到。请求的那个Meta参数的值,那现在src有了,内有了,是不是都OK了?那接下来呀,创建一个对象,Movie等于谁?是不是等于item?
20:00
艾特们,谁是他吧?哎,是他,是他的话,我们接下来干啥呀,同学们。你是不是在这可以串建一给它,然后虽然报错,大家别着急,别着急,我们咋写呀,Src等于s c name等于name,那我接下来是不是就要倒了,咋倒了倒谁呀啊同学们倒谁呀,是不是F谁你的校名吧,SCY什么movie,他点it import movie这个叫啥来着,叫他SCP movie099item啊对不对,哎导进来了,导进来之后是不是不报错了,那最后同学们你是不是可以将谁将这个movie返回给。管道啊,哎,对吧,防御管道管道现在没开呢吧,是不是各位,那我们开一下管道不就完了吗?三星四。
21:01
来找他把这个管道打开,这管道干什么?同学们是不是可以简单的小封装一下啊,对吧,你也要往里撇写东西嘛,之前咱们不也讲过吗?对吧?咋封装来着,咋调优来着,DeFine,什么open下限spider,然后里边写上spider对吧,然后self.fp等于打开一个,然后起个名吧,这边叫movie,点杰森是吧,然后我们来打开一下,然后再写个encoding,等于utf杠八。好,这打开再来关闭DeFine close_spider然后来个spider对吧,那接下来这个要干什么呀?是不是要关闭它点FP.close。哎,那你中间要干什么?同学是不是要写它self.fp.right对吧?因为它只能写一个字符串,所以说我们是不是要在这儿强转一下呀?好,同学们,我们万事俱备啊,这里边爬取的逻辑我们全部写好,你记住啊,当涉及到两个页面的时候,你一定要使用Meta去存啊,一定要使Meta去存啊,同学们好,那接下来就是见证奇迹的时刻。
22:26
来运营一下,好好拿到了吧,看到了他没有报任何错误吧,好,那你看有杰森,杰森里边有没有数据啊,我们在等待它,等待它完成之后,我们就可以干啥了呀,你看这多条管道你会不会呀,是吧,你多业会不会呀,不都一样了吗?来看。嗯,没有数据啊,那同学们为啥没有数据,难道没没写完吗?大家别着急啊,等一等,看看是不是还有什么小bug呢?我把它暂停一下,我把它暂停一下好OK啊,CTRLZCTRLZ暂停一下,暂停之后呢,我们现在干啥呢?给它打开一下啊,好OK,同学们来了吧,所以说大家注意啊,它都得运行完之后才会干啥呀,才会给你数据啊,才会给你数据,所以大家注意啊,我们这样吧,我们再把它删除一下啊,再把它删除一下,看这把运行还卡不卡啊,删除那么接下来我们再来。
23:23
走,嗯,再来运行一下。如果大家将来涉及到网速问题呢,你可以其实可以跟公司特殊去申请的啊,特殊申请的,那因为我们以前做爬虫的时候,有时候网速也不太好,那你就得跟公司去特殊申请了,来看走是不是可以了,各位诶没有问题啊,好同学们一定要知道我刚才的这种处理方式啊,我们在爬虫的时候遇到很多很多情况都是这样的,一级页面跳二级页面跳三级页面跳四级页面等等等等,好同学们,那我把视频暂停一下。
我来说两句