数据分析,涉及很多领域的知识,其中不仅包含了数学,统计学,同时也涵盖了计算机科学;有的同学非常重视后期分析的技能,但忽略了数据采集阶段需要掌握的技能。传统的数据采集一般先用纸质问卷收集信息,然后通过录入软件传入计算机;随着问卷星等平台的开发,网络问卷也成为了数据采集的一种常用形式。所以,广义上来说,利用编程语言搭建类似于问卷星的平台也是数据采集阶段需要掌握的技能之一;除此之外,批量收集网络中的现有数据也是一种技能。那么今天,小罗为大家介绍一种批量收集网络数据的方式---网络爬虫。
什么是爬虫?
爬虫,抽象的来说就是copy互联网上的信息;比如你在某个网页上复制信息,然后粘贴到本地的某个文本编辑器内,那么你就做了一次最原始的爬虫动作。
但显而易见,你可以这样一页又一页的去复制---粘贴,但其效率仅仅和你的手速相关。这是不可取的。并且,我们发现这是一个完全可重复的过程,所以只要设定好一定的读取规则(if-then),那么就完全可以利用循环(for)来快速实现上面的复制---粘贴过程(实质上是下载并解析网页)。这就是爬虫最本质的东西。
不过爬虫毕竟多是从网页里面下载信息,所以必要的网页知识(http,html,css,javascript)是必须的。
什么是HTML?
大家都浏览过网页,大家有没有思考过一个问题,' 浏览器是如何展现我们所看到的页面的?' 来看下面的图片:(谷歌浏览器+F12就能得到如下界面)
图片的左边是我们平时看到的网页,这些文字信息在右边也同样有所显示,但在形式上完全不同,仔细看,其中包含了一些规律:这些文字都被成对的 这些符号包裹着。我们大概能想象出其中的部分逻辑,我们的浏览器识别这些符号,并且通过某种规则展示出我们现在看到的场景。这就是html(超文本标记语言)的核心,这些符号叫做标签,他们大部分成对出现,各自承担了一些显示文本的功能或其他功能( 例如超链接 ),并且,这些标签构成了网页的整个骨架,而标签里面的内容,就是整个网页的'肉'。了解了html,我们才能知道在整个页面中,我们需要爬取的信息,放在哪个标签内。
什么是CSS?
css全称是层叠样式表。有了html,我们有了骨架和肉,但还缺少皮肤;而不同的部位,不同的标签有不同的显示方式(属性),层叠样式表就是为了这样一种目的而产生的。
红框内就是层叠样式表,不同的标签有不同的属性,例如字体颜色,粗细,大小等等。反过来,通过属性和标签的类型,我们也能快速的定位某一个标签。这就是css对于爬虫的作用,他提供了一种可以方法取识别我们要定位的标签。
Javascript和HTTP
Javascript是一种运行在浏览器端的脚本语言,和R语言类似;区别是前者指导浏览器进行一系列操作,而后者指导R软件进行一系列操作。Javascript目前对于爬虫的实施者来说,意义不明显,所以这里就不再深入介绍。
HTTP是一种传输协议,定义了任意两个实体之间进行信息交换时候的标准。其中,我们最常见到的一个内容叫URL(统一资源定位符),这个东西是什么呢,请看下图:
没错,就是我们常常说的地址栏,他的具体结构感兴趣的朋友可以自行了解;对于爬虫实施者来说,他的作用就是告诉爬虫程序,我们要找的页面在哪里(包括了对方的IP,文件地址,文件名等等)。
开启爬虫之旅
今天我们爬一爬成都市的人才公寓网站,看一看目前是哪些单位的哪些人才申请了哪些住房。因为本来就是公示的信息,所以不存在信息泄露的问题哈。记住:爬虫的正当性很重要!
需要的原料:
第一步
找到需要爬取的网页地址,观察网页结构
我们爬的网页为:
https://www.cdfgj.gov.cn/RCAJ/FinalPublicityList.aspx?page=1
这是一个非常友好的表格,说明dang和guojia是希望我们查看的,嗯,正当性更明确了。
通过晃动鼠标,小罗没有费多大力气就找到了表格所在的标签,大概在一个标签内,也就是页面被盖住的地方。
下面我们就启用杀手锏---selectorgadget,用来返回标签css唯一识别标识;这里需要大家用谷歌浏览器,并且安装selectorgadget,前面有教程的连接地址,这里小罗就默认大家已经安装好了哈。
如果安装成功,右上角会有一个放大镜图标,点击它,便出现右下角的对话框,接下来,我们选择我们想要爬去的内容,那么相似的内容就会黄色高亮显示,对话框中也会出现对应内容的css唯一标识。在这里是:
#ID_ucFinalPublicityList_gridView td
有了这个东西以后,爬取就可以正式开始了,让我们返回Rstudio。
可以看到,内容基本上是我们想要的,但这仅仅只有一页内容。
那么,当我们想要爬取更多页面的内容时,该怎么办呢?回到前面说的URL(统一资源定位符)
通过几次翻页以后,我们发现定位符里面唯一改变的就是page=后面的数字。所以我们可以大胆的推测,只需要更改这个数字,那么我们就可以获得不同的的页面。想到这里,是不是自然的就联想到把上面的代码包含在一个循环里面。我们来做一做这个事情。
可以看到,前10页的内容已经被我们爬取下来了。
有了数据以后,我们就可以做更深入的数据分析啦!
总结
这次小罗描述的静态网页的爬虫,静态网页是指在一开始的时候,所有的页面数据就已经全部加载,不会因为与用户的交互而改变数据内容。目前大多数的网页都是异步加载的动态数据,所以需要模拟浏览器行为的工具辅助爬虫,在后面的文章中,小罗会推出动态数据的爬取,请大家继续关注!
通过这篇文章的介绍,小罗希望非计算机专业,但又需要用到爬虫的朋友对一些基本概念有一个初步的了解,因为爬虫这个东西涉及的内容较多,比较杂,跟着做,复制粘贴运行比较容易,但明白一些相对底层的原理才更重要。
R和python都是数据分析软件里面比较好的爬虫工具,R里面除了rvest还有RUrl,XML等包可以进行爬虫,应该来说是一套比较完整的工具。
最后,需要成都人才公寓数据的朋友可以给小罗留邮箱地址。
联系客服