加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

网络爬虫

发布时间:2022-11-18 18:31:34 所属栏目:大数据 来源:互联网
导读: 现在从网络爬虫的五个方面开始讲起,即定义,背景,原理,工具,实战。
一:网络爬虫定义
参考:百度百科网络爬虫定义
网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者等),是一种按

现在从网络爬虫的五个方面开始讲起,即定义,背景,原理,工具,实战。

一:网络爬虫定义

参考:百度百科网络爬虫定义

网络爬虫(又被称为网页蜘蛛,网络机器人,网页追逐者等),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,跟浏览器一样,是一个web客户端程序,如下图:

爬虫大数据_大数据爬虫_网络爬虫与大数据

网络爬虫

二:网络爬虫背景

计算机网络本质上是一种传播工具,方便人们更好的相互交流。计算机网络将原本世界上各个孤立的网络连接起来,由很多子网络进而形成一个非常大的网络,即万维网。在这个大的网络里,网页也将是成千上万,数不甚数(截止到 2007 年底,Internet 上网页数量超出 160 亿个),导致人们很难去找到所需要的信息,如何有效地提取并利用这些信息成为一个巨大的挑战。此时,搜索引擎也就出现了, 比如AltaVista,Yahoo!和Google,搜索引擎原理技术如下:

网络爬虫与大数据_大数据爬虫_爬虫大数据

搜索引擎技术原理架构

从上图可以看出,数据的源头是万维网,而采集器是spider,也就是我们今天讲的网络爬虫。

三:网络爬虫原理

由于网络爬虫是数据采集存储器,我们先来介绍网站的数据流向,这样让我们知道网络爬虫处于哪一个流程,如下图:

网络爬虫与大数据_爬虫大数据_大数据爬虫

1.让我们先看数据和信息的定义(引用《白话大数据与机器学习》):

数据:承载了"信息"的符号(数字,字符,字母,图片,音频,视频等),才能被称为数据。

信息:是用来消除随机不确定性的证据或者凭证。至于信息的如何度量,可以参看信息论和概率统计相关学科。

2.完整的数据流图:

大数据爬虫_网络爬虫与大数据_爬虫大数据

网路爬虫主要包含:媒体网络分析,网络采集,数据存储,其中媒体网络分析主要指人工对web站点或者app的网络协议进行定量分析,人工确定采集策略和步骤,这一步是网络爬虫最重要的,也是最难的;网络采集步骤主要是采集策略和步骤的算法代码实现,然后提取特征字段和一定程度的清洗转换,存入到相关库里(比如mysql,mongdb,redis,elasticsearch等);

数据建模与分析主要指机器学习算法模型,为了更好的建模,在这里一般会对原始数据根据模型的相关规则进行清洗转换;

数据可视化和决策,就是数据BI, 根据模型进行预测分析之后,产生相关领域的报表,发现一定的规律,从而接着为客户提供垂直领域的数据服务能力,最后客户觉得该数据服务有很大的指导价值,比如定向精准投放广告大数据爬虫,为此客户付出一定量的金钱到达数据变现。

这也是为什么有价值的数据就像石油一样,采集数据和石油开采本质是一样,谁掌握了价值大的数据,谁就是行业老大,否则巧妇难为无米之炊,云计算和AI都就像断了源头的水一样,没有活力!

三: 网路爬虫原理

网络爬虫与大数据_大数据爬虫_爬虫大数据

网络爬虫的原理就是:

(1)我们开发的网络爬虫程序跟浏览器,app等一样,本质上都是一个web客户端;

(2)其中web客户端通过发送request的方式经过web网络中转到达web服务端,web把response通过web网络中转给web客户端,其中request是通过一定的协议格式封装成的数据包,其中常见的应用层协议有:http(s)/ftp等。

(3)我们开发的网络爬虫,本质就是模拟浏览器或者客户端,让程序的行为在服务器看起来更像人一样操作,就成功了;

(4)为了获取服务器的数据,我们的程序也要发送请求,这时候需要抓包程序(其实就是一个代理服务器),常见的http/https抓包程序:浏览器开发者工具(这里推荐chrome开发者工具);charles/fiddler/mitmproxy(命令行抓包工具,对接python脚本)等,我们要找到我们需要的网页数据对应哪个具体的请求。【注意】:如果客户端不是通过http(s)协议的话,而是ftp,或者更加底层协议的话,如tcp/udp等,我们就需要其他的抓包工具,比如wireshark其他工具进行抓包分析;

(5)我们开发的网络爬虫程序,可以从两个部分着手:

一般从图中的【2】着手,通过抓包构造Request的方式,这是最常见的,也是效率最快的一种方式,常常会辅助反编译app的手段;

另一种方式就是模拟,也是第一种方法解决不了的时候,即Request不容易构造,不容易还原,此时从第一步着手:比如,人操作浏览器/app的时候,进行各种点击下拉等操作,我们也可以通过相关库,进行动作流程制定,写出相关脚本,定时驱动浏览器或者app去跑,然后捕获特定请求的请求,通过插入的解析脚本解析得到数据即可,这种方式一般比较慢,采集的数据也会慢很多。

4.网络爬虫系统一般设计图:

大数据爬虫_网络爬虫与大数据_爬虫大数据

简易爬虫系统

网络爬虫与大数据_爬虫大数据_大数据爬虫

单机网络爬虫系统详细设计图

大数据爬虫_网络爬虫与大数据_爬虫大数据

分布式网路爬虫系统

大数据爬虫_网络爬虫与大数据_爬虫大数据

scrapy框架组件

设计核心组件:

1.调度组件:比如select模块或者Scheduler模块,组要是队列的设置,优先级如何考虑,谁先抓,谁后抓,以及url去重的考虑;

2.下载组件:比如上面的crawl模块或者downloader模块,此处关键是构造requests,设置请求头部,设置代理ip,设置cookie,构造好参数之间的关系,设置下载频率,控制并发数等;

3.解析组件:上面的Extract模块或者spider模块,主要首先定义好要提取的字段特征,根据相应结果的字段位置提取,常见方法是css选择器,xpath, jmepath, 正则表达式等;

4.存储组件:如上面的cache模块,pages模块等,将第3步提取的item或者特征,进行一定的转换存储到相关库中。

5.engine组件或者distribute组件,主要是协调上面各个组件相互协作,统一安排,分布式的核心是,把带抓取的url库存放到一个统一的库进行维护,或者放到消息队里,这样是为了去重和优先级调度。

四:网络爬虫工具

这里主要针对python相关开发,其他语言不是太熟悉,所以不作介绍,理论上每种语言都可以用来开发网络爬虫程序,只不过是每种语言的开发效率和性能不一样而已:

1.抓包工具[大多是一个代理web服务,监听相应端口,截取相关协议请求]:

pc端:chrome开发者工具,charles工具,wiresharks,其他浏览器开发者工具等;

移动端:charles, fiddler, mitmproxy, anyproxy等,后面两个是命令行工具,方便对接程序脚本;

2.网络请求库:

同步请求库:requests, urllib等;

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!