Python爬虫的作用与地位(附爬虫技术路线图)

96
人生苦短丨我爱python
2019.01.29 13:29 字数 2892

小编说:网络爬虫是一种伴随着互联网诞生与演化的“古老”的网络技术,随着互联网进入大数据时代,爬虫技术迎来了一波新的振兴浪潮。 本文通过企业内部与互联网两个场景向大家讲书爬虫发挥了哪些重要作用。本文选自《虫术——Python绝技》一书。

学习Python中有不明白推荐加入交流群

            号:864573496
            群里有志同道合的小伙伴,互帮互助,
            群里有不错的视频学习教程和PDF!

在大数据架构中,数据收集与数据存储占据了极为重要的地位,可以说是大数据的核心基础。而爬虫技术在这两大核心技术层次中占有了很大的比例。为何有此一说?我们不妨通过一个实际应用场景来看看爬虫到底发挥了哪些作用?

在了解爬虫的作用之前,应该先了解其基本特性:

主动——爬虫的重点在于“爬取”(Crawl),这是一种主动性的行为。换句话说,它是一个可以独立运行且能按照一定规则运作的应用程序。

自动化——由于处理的数据可能很分散,数据的存留具有一定的时效性,所以它是一套无人值守的自动化程序。

企业内部爬虫

在我接近20年的IT从业生涯中,企业管理系统是我参与过的项目或产品中占比最大的。在这些项目与产品的开发过程中,我观察到很多企业内部其实有非常多的数据处理场景可以用爬虫技术进行处理,从而能以惊人的效率取代原有的人工化的操作。

以我近年来在电商企业内部所见为例,阿里巴巴(简称阿里)已显现出它在电子商务一统全球的实力与地位,几乎可以将电商与阿里之间划一个等号。阿里为各个店铺和商家提供了各种各样优秀的运营工具。我们会理所当然地认为电商企业内部的信息化管理程度一定很高,不是吗?然而事实恰恰相反,我见过的多数中小型的电商企业甚至是三板挂牌企业内部的信息化水平仍然非常落后,不少企业仍然依赖Excel这样基于大量人力为主导的表格处理。那么问题来了,为何阿里巴巴、京东这些电商平台已经提供了大量优质运营工具,而电商企业的信息化水平却很低,还需要靠劳动密集型的方式进行运营呢?

首先,电商企业不会只在某一平台上开店,通常都会在多个平台同时开多个店铺以拓宽市场的销售渠道;其次,电商企业之间、电商与供货商之间缺乏统一的数据交换标准,通常只依赖于一些技术陈旧的ERP来维持日常的运营。

电商企业通常只能通过某一平台上提供的专用工具监测某些产品的价格波动和销售情况,而无法全面、统一地了解他们所销售的产品在各大平台的具体表现如何。然而这样的需求很明显是迫切的,因为只有了解销售数据的变化才能实时调节销售的策略。我见过最多的做法就是企业安排一位专人从各大电商平台中导出运行的数据,然后合并到Excel中,再进行一番统计,手工做出各种统计报表作为分析依据,这种做法往往对某一个单品就得做一次!

其实,导致这种现象的原因有以下几点:

(1)缺乏统一的数据来源——这是不可调和的,因为电商运行的数据源本来就具有多样性。

(2)结构化数据与非结构化数据并存——企业间最常见的数据交互格式是Excel,交互工具是微信和QQ。

(3)一个数据存在多种时间版本——QQ或者微信上的同一个文件修改多了且重复传会出现各种的 data.xlsx、data(1).xlsx…data(n).xlsx。

(4)数据结构可能存在随意性——Excel文件内很少会看见用英文命名的列,甚至相同作用的列很有可能会采用不同的中文名。

(5)数据查找变得困难——在电商企业与供货商之间要找出某个时段相同的数据副本可能是一件极为可怕的事件。

我们不妨来大胆地假设一下,如果将这些事情换成让爬虫去处理,那么情况会变成什么样子呢?

(1)每天爬虫在一个固定的时间到淘宝、京东或者其他电商平台上自动下载商家当前的营业数据。

(2)完成爬取后将数据自动保存到数据库。

(3)从内网的某台PC的指定文件夹中下载每天从其他经销商发来的Excel文件,整理后保存到数据库。

(4)发现某些商品库存不足自动生成供货商规定格式的订货单,通过电子邮件发出。

(5)决策者(运营经理/老板)在手机或PC中通过数据可视化工具查看每天的数据统计结果,或者由爬虫系统直接生成统计报表发到他们的邮箱中。

此时你可能会产生这样的疑问:爬虫不是单单爬取数据的吗?为何还能处理这么多的事情呢?这还是爬虫的技术领域吗?答案是肯定的,上面这个例子是由我经历过的一个项目中的真实案例简化而来的,爬虫的这些行为融合了对爬取数据的后处理与Python自动化后得到的效果。其实爬虫能做到的事情可以更多,具体的实现与企业内部的实际需求相关。而在互联网中,它更像是一个具有“智能”的机器人。

企业内网爬虫只是互联网爬虫的一个小范围的应用,是爬虫技术与自动化技术的一种综合性应用,而且自动化技术的占比可能会比爬虫技术手段更多一些。

互联网爬虫

与企业爬虫相比,互联网爬虫就显得更为单一与常见,在这个数据唾手可得的时代,在数据中用爬虫淘金并不鲜见。如搜索引擎本身就是“虫术大师”,只要是它们想爬的网站,几乎是没有爬不穿的。App Store上最火的内容性App总是某些新闻类的聚合应用,大多数网站开发者都知道那只是一个聚合了各种新闻网站链接的综合性平台,它们的内容也是靠“放虫”才可能在各大新闻门户中获取第一手的新闻信息。更重要的是,这些新闻信息都是“免费”的,任何一个用户都可以轻易地从互联网上获取,这个用户当然也可以包括“虫子”。

互联网中存在大量如新闻资讯一类的免费内容,或是政府、企业、第三方机构、团体甚至个人共享的各种数据。例如,我们可以轻易地到气象局的网站上获取近十年某个地区的降雨量信息,或者从证券交易所获取当天各支股票的价格走势,又或者到微博上获知当天最具有传播性的某个事件的详情。换句话说,只要有清晰的目标数据源,只要你具有对数据源具有访问的权限,那么你也可以让爬虫为你代劳,一次性从数据源上获取所有你想要的数据。

要通过爬虫顺利地从互联网中爬取数据,那么就得了解这些数据的特质,然后采取针对性的手段才可能做到无往不利。一般来说,互联网中可爬取的数据可分为以下几种:

(1)一般性的网页——符合W3C规范的网页都可视为一种半结构化的内容,可以通过一些页面元素分析工具从网页中读取指定数据,由于网页开发的自由度极大,几乎没有哪个网站的结构是完全相同的。而且可变因素也很多,可能网页读取要通过权限的审查,或者网页由客户端的JavaScript进行绘制才能呈现最终效果,甚至网页可能来源于CDN,其内容未必是最新的,只是某个网络缓存的副本,等等。不过不用担心,当你完全掌握了虫术,这一切对你将不再是阻挡。

(2)API资源——API资源是最适合爬取的数据源(没有之一),因为RESTful API都是结构化数据,会以XML或者JSON的形式进行调用或者返回,这些数据内容即使没有API说明手册一般也能读懂。

(3)文件资源——文件资源属于最麻烦的数据源了,除非爬取的文件是以结构化数据格式呈现的,否则作为自由文本,由于是非结构化的,我们需要对文本的内容进行一些后处理,要让爬虫“读懂”这些文本内容,再判断哪些内容是获取的目标。

(4)媒体资源——如图片和视频等,其爬取的动作基本与文件类似,只是由于图片与视频等资源一般来说都比较大,可能还需要对文件的元信息进行一些分析以判断其是否具有爬取的价值,以避免让爬虫过多地消耗不必要的网络流量与爬取时间。

虫术技术路线图

爬虫涉及的技术领域很多,运用的技术也非常庞杂,从基本的网络访问到复杂的机器学习,可能会让初入门径者有望而却步的想法。为了让大家有一个全面的认识,我们特意将初级、中级、高级三个阶段中所要学习与使用的技术归纳成下图以作参考。


技术路线图.png
日记本
Gupao