数据分析就是像是做饭一样,正所谓“巧妇难为无米之炊”。数据分析的前提就是数据的获取,只有把食材准备好,经过我们的加工,可以呈现出一道色香味俱全的美味菜肴。所以数据获取是整个数据分析的中流砥柱,数据质量的高低直接导致最终的结果是否准确。
数据获取如果说数据获取就是准备食材,那么食材的来源大概有两种方式,一种是去菜市场购买,这种方式的食材,由商家给你准备好了,拿回来洗一洗或者不用洗就可以直接用,那么菜贩子就是你的数据供应商。好是好,缺点是你得花钱买啊。
还有一种方式,你自己去田野里面去挖野菜,当然这些菜是都没有属主的,也就说你不能别人的菜地里面去“偷”啊,你只能去挖一些没有版权的内容。这种方式呢,就是所谓的网络爬虫。优点是免费,互联网的公开的无版权的数据(或者有版权可以免费商用等等)都可以适应,缺点就是你需要自己去寻找,自己去整理。
本地数据
本地数据,通俗的来讲,就是目前我们手里有的数据,拿来就可以用的,或者说购买外部数据到内部系统中使用都可以作为本地数据使用。
不过,我们听到最多的关于本地数据的名词应该是本地数据库,这个就很容易理解,它不仅能给应用提供最快的响应速度,而且也可以给我们现成的数据来做一些数据分析工作。
当然作为本地数据,不仅仅是指数据库的数据形式,也可以是Excel、Word文件,也可以是txt、csv格式的文件,都可以作为本地数据来使用。
在数据分析中,如果有本地数据供我们使用,那就可以直接进行下一步,查看数据质量怎么样,需不需要清洗,把数据做到可用的规范化。
本地数据通常存在工作场景中,公司生产过程中产生的一些信息,我们可以把这些作为原材料,进行一系列的数据分析,得出一些可用的结论,以此来更好的调整策略。不过作为初学者来说,很难找到一些合适的本地数据供学习使用,但是没有关系,在互联网时代最不缺的就是信息,我们完全可以从网络中找到需要的一些数据。
网络数据
网络数据代指的是那些我们可以通过互联网可以浏览到的数据,比如说,新闻信息、招聘求职信息、出租租房信息等等,都是网络数据。据IDC发布《数据时代2025》的报告显示,在2018年每天的可以产生92EB(1EB=1024PB,1PB=2014TB)的信息,预计2025年每天会产生491EB的信息,我们正在处于的是一个信息爆炸的时代。每个人都处在千亿的信息流中,每天各种App的信息尽力的想占据着我们的时间,我们在这繁杂的信息中寻找着一点我们可用的、喜欢的信息。
早在10年前,就有研究表明,每人每天接收到的信息量相当于174份报纸,在今天信息更加指数型增长,我们更是无法去查看每一条信息,只能依靠于特定的方式获取自己想要的信息。
不过对于我们学习数据分析来说,这就是天然的宝库。比如说,我们想知道今年的找工作形势怎么样,我们可以把招聘网站上的公司发布的数据分析岗位的信息。假设,我们想知道上海目前数据分析师的岗位大概的薪资范围是多少,学历要求是怎么样,这样可以给求职者一个更好的参考,在与HR谈论薪资时候,不至于太离谱,导致最后拿不到满意的薪资。
那么这个问题来了,招聘网站上有1000 岗位信息,我们要每个都复制粘贴到excel,然后在计算分析可参考的结果,估计是一个下下策,那么有什么好的方式吗?当然可以用Python编写一个网络爬虫,将信息下载到本地,代替你重复性的复制粘贴的劳动。下一小节,我们将继续了解网络爬虫的使用。
初识爬虫
网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
爬虫最重要的特点就是有一定的规则,这个规则就是网页中的特定位置的信息,比如说,一个招聘信息网页中岗位名称、岗位薪资等,都是在特定位置,爬虫可以自动抓取每一页中特定位置的信息。
每个网站中的HTML结构是不同的,而每一套的爬虫程序只能按照特定的内容获取信息,假设你写的是采集A招聘网站上爬虫,在B招聘网站上是不能用的。
网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际上的爬虫通常是几种爬虫技术相结合实现的。我们多数实现的都是聚焦网络爬虫和深层网络爬虫。
1.通用网络爬虫
通用网络爬虫又称全网爬虫(Scalable Web Crawler),此类爬虫通过会一些种子链接扩充到整个 Web,主要为门户站点搜索引擎和大型网络服务提供商采集数据。比如常用的搜索引擎,百度和谷歌,就是此类别爬虫,你能搜到很多其他的网站的信息,就是通过全网爬虫将信息采集成快照,供用户搜索使用。由于一些商业保护和竞争,这样的爬虫核心技术很少有做到开源。
这类网络爬虫的爬取范围和数量巨大,对于爬取速度和存储空间要求较高,但是爬取页面的顺序要求相对较低,需要同时爬取的页面多,通常采用并行、集群分布的工作方式。
2.聚焦网络爬虫
聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬取那些与预先定义好的主题相关页面的网络爬虫。和通用网络爬虫相比,聚焦爬虫只需要爬取特定的页面,极大程度上节省硬件和网络资源,保存的页面也会相对的少很多,爬取速度也会快很多。
我们经常用的写到的爬虫就是这类爬虫,聚焦于特定的网站特定的信息,将这些信息采集到本地使用。
3.增量式网络爬虫
增量式网络爬虫(Incremental Web Crawler)是指只定向爬取新增页面,对于已经下载过的页面不进行爬取,故名为增量爬虫。这类爬虫工作任务少,但是需要有一定的识别难度,先判断当前页面是否已经爬取过。
4.深层网络爬虫
在我们日常访问的网页中能直接通过链接打开即可看到的内容的页面属于表层网页(Surface Web),而需要登录或者需要添加表单提交后才可以看到的内容的页面属于深层网页(Deep Web)。深层网络爬虫(Deep Web Crawler)是指的可爬取到由动态数据生成的页面。所以它的爬虫结构会相对的更复杂一些,因为涉及到相关的表单提交和数据验证。
在日常的数据采集的爬虫的使用中,我们也会经常使用一些深层网络爬虫,其实就是提交一些带参数的post请求来获取的返回数据。
爬虫合法性
在数据时代,数据隐私也越来越重要的,有时候偶尔也会在新闻上看见说XX公司程序员因非法爬取某些用户的隐私信息构成了侵犯公民隐私罪,那么使用爬虫是否合法呢?
通常在网站的根目录下都存放robots协议,也叫robots.txt,可以在直接访问访问的根目录/robots.txt,这里面的内容告诉网络搜索引擎,网站中的哪些内容是可以获取的,哪些内容是不可以获取的。比如知乎的robots协议就是https://www.zhihu.com/robots.txt。我们看下其中的一段是这样写的,如图所示。
其中User-agent告诉服务器是访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。而User-agent是百度爬虫的时候,服务器是不允许访问Disallow列举的路径下的链接,Allow表示可访问该路径下的链接。
但是robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。
多数网站中都有在请求头上在我们自行编写的爬虫程序中,通常的User-agent都设置为用户浏览器,这个后面的章节中详细的讲解。
我们个人用户、开发者编写的爬虫程序并非搜索引擎爬虫,那么到底应该是遵循什么规则呢?
1.禁止使用爬虫非法获取公民个人隐私,爬取隐私信息可能构成侵犯个人隐私罪。正常网站都会对用户隐私保护很严格。
2.爬虫程序干扰网站或者系统的正常运行,可能构成破坏计算机系统罪。不过多数网站都有限流措施,同一IP短时内发送请求数达到一定的阈值,将不再对此IP的请求做回应。
3.爬虫程序非法爬取付费信息以出售获利,可能构成侵犯知识产权罪。
作为开发者来说,我们应该合理使用技术,而不是使用技术做违法行为。在我们本书中所使用的爬虫程序都是供学习使用,是正常合理可以使用的爬虫程序。