爬虫工做内容css
互联网做为人类历史最大的知识仓库,是没有充分结构化的。目前互联网仅仅是一些文本等多媒体数据的聚合,内容虽然很是有价值,可是程序是没法使用那些没有结构化的数据。web
在2006年左右,有专家提出的web3.0,语义互联网,知识共享。虽然如今开放API,SOA概念愈来愈普及,真正语义上的互联网的时代彷佛还很是遥远。所以爬虫依然是最重要的手段,一端不断解析,聚合互联网上的数据,另一端向各类各样的的应用输送数据。正则表达式
现有爬虫开发技术存在问题算法
从招聘市场岗位需求能够看出,近年来对爬虫工程师需求愈来愈强烈。chrome
我的判断缘由有两个:服务器
信息聚合是互联网公司的基本需求。网络
数据时代到来,对数据更强烈的需求。框架
下面是我整理的部分靠爬虫聚合信息的创业公司,按照时间顺序排序:less
搜索引擎聚合了网页:百度,google,机器学习
机票比价网站:去哪儿,聚合各大航空公司票价
团购平台:团800 聚合了团购网站信息。
比价网站聚合了各大电商平台的商品价格:美丽说,蘑菇街,一淘
记帐理财产品聚合和消费者,信用卡,银行卡信息:挖财和铜板街。
新闻聚合平台:今日头条
p2p平台聚合各大p2p借贷公司的信息:网贷之家,融360
风控公司须要收集企业公司,财务司法等信息:鹏元
征信数据会收集了贷款者司法,社交,财务,大量和征信相关信息:聚信立,量化派,zestfinace
最后5种类型,几乎2014年都是开始。不少金融场景相关应用开始出现,这就对准确度和可靠性提出了更高的要求。但现有的爬虫开发技术可否知足高可靠,大规模,高效率开发需求呢?
从软件工程角度来看,一件事情若是没法评估,那就没法管理。爬虫开发常常是被吐槽的缘由之一,就是工做量经常没法评估。通常的软件项目的开发过程随着时间推动,工做量会逐渐减小,也是你们常常说的燃尽效果。
而爬虫开发生命周期以下图:
爬虫开发主要有两个方面内容:下载网页,解析网页。解析网页大概占据开发工做的80%左右。
下载网页功能的开发工做,会涉及IP限制,验证码等问题,这样问题都是能够预期的。同时,随着如今优秀的爬虫框架和云服务器的普及,问题解决起来会更轻松。
编写解析代码,虽然有一些基本工具chrome,firecdebug可使用,但始终须要人工分析,编写解析规则。不管是使用xpath,正则表达式,css selector,都不能减小这一部分的工做量。
大量重复性工做会致使如下两个问题:
即便同类型的网页看起来99%是同样,也须要编写独立的爬虫。这就会给人这样一种感受——爬虫开发大部分的工做内容是重复的。
数据源网页改版,几乎整个爬虫项目须要重作。重作的工做量几乎是100%,爬虫工程师心中每每是一万只羊驼跑过。如今不少征信数据采集公司的合做伙伴,当数据源网站改版,经常须要一至两天才能修复爬虫,很明显这种可靠性是没法知足金融场景须要。
智能化解析
这是一张新浪新闻的图片。
能够发现,视觉上很容易了解到,新闻所报道的事件的标题,发表时间和正文。天然也会想到,可否经过一些机器学习的算法达到自动解析的目的?这样就不用人工编写解析额,减小重复劳动。在2008年开始,就要研究机构发表了相关论文。
www.cs.cmu.edu/~deepay/mywww/papers/www08-segments.pdf
research.microsoft.com/en-us/um/people/znie/p048.special.nie.pdf
也就是在2008有一家相关的创业公司,在斯坦福大学孵化。
DiffBot智能化数据采集公司
总部位于加州的Diffbot成立于2008年,创始人Mike Tung,是斯坦福毕业研究生。Diffbot是经过人工智能技术,让“机器”识别网页内容,抓取关键内容,并输出软件能够直接识别的结构化数据。其创始人兼首席执行官Mike Tung表示,“Diffbot如今作的,至关于人类在浏览网页文章时所作的事情,找出页面中最核心的相关信息。”目前Diffbot已经发布了头版API和文章API,还有产品API。服务的客户包括三星、eBay、思科、美国在线等。
Diffbot的理念就是经过“视觉机器人”来扫描和识别不一样的网页类型(主要是非结构化的数据),再将这些丰富的数据源用于其余应用。Mike Tung表示:“咱们在获取页面以后会对其进行分析,而后经过成熟先进的技术进行结构化处理。”以前我提到的we structure the world's knowledge,就是该公司提出的理念。
Diffbot在基于智能采集的基础上,又开发出不少数据产品,好比知识图谱,智能商业BI。在2016腾讯与硅谷风投机构Felicis Ventures领投了人工智能创业公司Diffbot 1000万美圆的A轮融资,不少互联网巨头开始发现这家公司的价值。
算法实践
经过智能方式来解析网页须要两个步骤:
基于视觉上的网页分割,将网页分割几个视觉块。
经过机器学习训练的方式来判断各个视觉块的类型,是标题,仍是正文。其中主要流程和通常机器须要流程没什么区别。这就不详细解释。使用到使用的开源框架有:scikit-learn,phantomjs
Scikit-Learn机器学习库已经很是成熟,很容易上手。
phantomjs,是一个headless webkit渲染引擎。作爬虫开发的同窗应该很是须要。
网页分割算法
从Diffbot早期发布的文章来看,是经过图像处理的方式来切割视觉块。使用到的算法有,边界检查,文字识别等算法。但这种方式计算量偏大,复杂度很高。
另一种实现方式是基于Dom树结构,导出所需的视觉特征。
聚合时候需用的特征变量。主要考虑视觉相关的因素有元素在页面上的位置,宽度和高度,Dom的层次。
有一点须要注意的是,如今网页不少是动态生成。须要借助phantomjs工具来进行动态网页渲染。
聚类算法能够选用的DBSCAN,DBSCAN算法优势是更加密度来划分,比起K-mean算法的优势,是处理任意形状的聚合。
具体的实现方式能够参考下面博文:http://blog.mapado.com/web-page-segmentation-by-visual-clustering/
分类算法
在第一步处理后,网页上的标签,会被划分分若干类,须要判断标签的类型,是不是标题,正文,广告,导航之类。须要整理出相似下面的,训练矩阵。
整个学习过程与通常的机器学习训练过程没有区别。因为数据样本规模不大,分类算法基本算法采起。分类算法能够选用朴素贝叶斯,或者SVM。
总结和展望
本文介绍的方式比较粗略,通常来讲解析模型只能针对特定的网络训练解析模型,好比新闻,电商产品页。因此不一样类型的网页,所须要的特征变量有较大差异。针对不一样特色类型数据,须要你们本身花时间去探索和实践。
随着数据时代和智能化时代到来,爬虫做为重要的数据来源,自身须要一些技术提高来适应时代的要求,这也就对爬虫工程师提出更高的要求。成文粗陋,权且当作抛砖引玉,欢迎你们留言讨论。