首发于 数据与AI
网络爬虫

网络爬虫

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

一:网络爬虫定义

参考: 百度百科网络爬虫定义
网络爬虫(又被称为网页 蜘蛛,网络机器人,网页追逐者等),是一种按照一定的规则,自动地抓取 万维网信息的程序或者脚本,跟浏览器一样,是一个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等;

异步请求库:aiohttp, asyncio等;

3. 自动化测试工具,主要用来模拟,一般需要搭配特定的驱动库:

pc端:selenium, chromedriver, chrome-headless, phantomjs, casperjs等;

移动端:appnium等

4.解析库:

lxml; Beatifulsoup; pquery; jmepath; Selector等

5.数据存储库:

mysql/pymysql; mongodb/pymongo; redis/redis-py; elasticsearch等

6.爬虫框架库:

pyspider/scrapy(twisted)/scrapy-splash/scrapy-redis等

7.javascript代码执行库:

selenium, splash, js2py, jsbeautifier,nodejs等

8.爬虫部署库:

scrapyd/scrapyd-client/scrapyrt/docker/shell等

9.多进程与线程:

multiprocessing /threading等


五:网络爬虫实战:

一般要了解网络爬虫建议从头写起,不要一开始使用框架,这样可以熟悉整个具体流程:从网络请求,网络下载,内容解析,内容清洗和内容存储,网络教程很多,这里就不介绍很多了。

PS:网络爬虫系统往往最难的几点,在于性能优化和实时抓取以及覆盖率,其次还有调度设计,爬取效率,去重,入库效率,以及代理池和cookie池等的设计,而爬虫系统抓取的数据往往也是互联网数据的一滴水,微弱的忽略不计,本质就是一个采样的思想,也就是互联网数据的一个样本,只有数据量达到一定的时候,才具有一定的可信度,否则得出的结论就是井底之蛙一样以偏概全。最后提醒一点的是,你的爬虫请求会占用网络服务提供方服务器的资源,尽量控制好你的频率和请求并发连接数,尽量根据对方的Robot.txt和sitemap文件,进行文明道德抓取,否则有可能引起对方的诉讼!

天下网TXWEB梅州市网页制作哪家专业台州seo按天计费推荐中山网页制作报价崇左企业网站设计价格珠海市网页设计公司湛江市品牌网站设计公司盘锦市网站建设推荐潍坊市网站设计价格宁波网站设计价格肇庆网站开发报价娄底网站优化多少钱济南网页设计报价海东网站建设哪家专业鹰潭市企业网站改版多少钱遵义市网站定制南平seo按天计费襄阳seo优化报价遵义市网站搭建公司抚顺seo排名多少钱中山网页设计多少钱宜春网站优化哪家好盐城网络推广多少钱九江市阿里店铺运营价格海东seo优化价格眉山seo排名多少钱鹤壁企业网站设计价格通化市seo按天扣费多少钱鹰潭市阿里店铺运营公司淮安市模板网站建设多少钱林芝市做网站公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网TXWEB XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化