一、爬取豆瓣电影Top250
话说上回讲了什么是爬虫以及爬虫的基本原理,按照很多技术文章的尿性都会直接来一个urllib库,但是我偏不。就好比做一个东西,我喜欢先想象一下或者看一下这个东西做出来会是什么样子,而不是上来就干,那么这一回合,咱们直观的来看一下爬虫究竟爬出来什么东西。
这次我选择了对常见的“豆瓣电影排行”进行爬取,首先看一下豆瓣电影Top250的网页是什么样的:
在浏览器中打开:https://movie.douban.com/top250,可以看到以下:
我只截取了前几部和第一页的后几部页面信息,因为了解到这些足以。可以看到,TOP250电影排行分布在10页的网页中,每页有25部,其中每一部都写了电影名称,那么我们这次的需求就是爬去Top250电影的名称。话不多说,先上个代码look look:
先不分析,先看结果是什么样子的:
由于数目有点多,就不截全了,总之是一个这样的效果。那么有人就问了:这个不就是250部电影么,有啥难的?并不是难在哪里,而是比一个一个用手工复制的方式快捷了很多。怎么样,是不是就快速的抓到了想要的数据并且按照自己的格式排序了?
二、代码结构分析
为什么叫结构分析呢?因为这次我不会详细讲解每一个语句、每一个库是怎么用的,正则表达式是怎么样的,而是先讲一下这个爬虫代码的结构。
1、创建URL池
首先看第一部分,这是一个url池,呼应到了上一篇爬虫初识里说的东西,因为我不是从一个网页中爬数据,而是10个页面,所以需要在我们的url池中轮询爬取,我把它称为url_list(url列表):
我们对10个url轮番爬虫,直至最后一个网页爬取结束。
2、做好“伪装”准备
第二部分就是我上次说过的“伪装”头部信息:
于此同时,我新建了一个文件,以便后续爬虫得到的数据写入并保存到这个文本文件中:
3、真正要爬虫了
第三部分整体讲述了三件事:
一是向服务器发送get请求,其中包含了之前准备好的“伪装”信息headers,之后接收网页信息:
先不用管什么是requests,什么是.get···
二是利用正则表达式对获取到的网页信息进行“数据筛选”,得到自己真正需要的数据,在这里我们需要的就是电影名字:
其实这里的正则表达式包含了对网页信息简单的结构分析,细节先不表~
三就是对每个电影进行排序,让这个文本数据看起来好看一些:
当然,这整个步骤都是在下面这条语句包裹中完成,真正将url池轮询完毕,获取所有电影信息:
三、总结
这样一来我们就对这个简单的需求做了一个较为完整的代码结构分析,介绍了每一部分在做什么,最终达到了什么效果,希望用这个简单而粗糙的需求以及对应的代码可以让你对爬虫有一个直观的认识。
写在最后:外面的雨越下越大,雨声很助于我的睡眠,因此这次只能水水的结束了,虽然简单,但是该有的结构都有,浅显易懂又童叟无欺,总之,先不要过度关注某一行代码是怎么回事,先看我水完这一篇,下回再细细再水~
某著名作家说过:活得太累是因为睡的太晚。
实在太困,回见!