一、网络爬虫
爬虫又叫网络爬虫,网络蜘蛛,一种运行在互联网上用来获取数据的的自动程序。
- 互联网的数据,有很多,一般都是根据业务需求来的。
- 网页(文字、图片、视频)
- 商品数据
- 怎么获取数据?
- HTTP协议
- 人的操是通过浏览器的,程序是利用网络请求的相关协议获取数据。
- 自动化,尽可能减少人工的干预。
- 爬虫开发的技术,没有限制的。
python做网络爬虫是非常流行的。
Java 编写爬虫框架。
二、数据的分类
1、内部数据
业务数据
,公司使用BI
(Business Intelligence
)、CRM
系统、ERP
系统、邮件系统等产生的数据;
财务数据
,其中包括公司的支出、采购、收入等多项与公司日常运作有关的数据;
用户数据
,无论是网站、APP
还是游戏,用户注册都会填写邮箱、电话、身份证号码等数据,这些数据其实非常有价值,此外还要加上用户使用公司产品留下的行为数据。
历史数据
,公司沉淀下来的其他各种数据。
2、外部数据
社交网站数据
,包括微信、微博、人人网、Twitter
、Facebook
、LinkedIn
等社交媒体上的数据。
说明:社交数据部分是可以爬取的,另外一部分是需要运营方授权的。
线下采集数据
,包括Wifi
热点数据、地图数据等。
说明:这一块目前做的公司比较少,但同时也比较有价值。
政府开放数据,包括企业征信数据、企业注册数据、法院公示数据、公共交通数据等。
说明:如果你想要找的话,可到对应政府网站下载。
智能设备数据
,包括智能设备、传感器数据。
说明:你知道吗?一部智能手机,至少拥有8
个传感设备。
网络爬虫数据
,包括互联网上所有可以爬回的数据,文字、视频、图片其实也是数据,而且是非结构化数据。
企业交易数据
,包括商家流水数据、支付宝交易数据、信用卡消费数据等等。
说明:目前这一部分数据是最难获取的,因为数据就是宝贵的资产。
企业开放数据
,比如微博开放了商业数据API
,腾讯开放了腾讯云分析SDK
上报的应用数据,高德地图开放了LBS
数据等等。
说明:如果想找更多的数据API
,我推荐你去数据堂、聚合数据这两家网站上看一下,上面有大量的API
接口。
其它数据
,比如天气数据、交通数据、人口流动数据、位置数据等等。
在互联网公司,不管内部数据还是外部数据,其实都是为了获取用户相关的数据。
拿到用户的行为数据之后,会分析用户。
比如说电商类网站就是为推荐商品,搜索类的网站为了精准营销(
家具类)
广告联盟。
三、大数据与网络爬虫
大数据就是整合完公司内部外部数据,进行大数据存储,然后通过清洗,标注、去重、去噪、关联等过程可以将数据进行结构化,也可以进行大数据挖掘和数据分析,再以数据可视化呈现结果,打通数据孤岛形成数据闭环,将数据转换成“石油”和“生产资料”,最后应用到我们日常的生活、学习和工作中去。
四、爬虫与搜索系统
搜索系统可以简单的分为两类,
通用搜索,站内搜索
。
通用搜索:像百度,谷歌会爬取互联网上所有的数据
站内搜索:只需要业务系统的数据。
垂直搜索:行业数据和自己的数据。
总结:搜索一定会包含爬虫(除站内搜索外),爬虫爬取的数据不一定是为搜索服务。除了搜索功能以外,爬虫爬取的数据主要用来做数据分析。
五、爬虫的分类
网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:
- 通用网络爬虫(General Purpose Web Crawler)
- 聚焦网络爬虫(Focused Web Crawler)
- 增量式网络爬虫(Incremental Web Crawler)
- 深层网络爬虫(Deep Web Crawler)
实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
六、爬虫开发实现原理
本质:HTTP请求
使用Http Get协议获取数据,使用postt提交数据
客户端向服务器发送一个请求,请求头包含请求的方法、URL
、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME
的消息结构。
服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP
消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。
六、实现过程
- 指定一个种子url放入到队列中
- 从队列中获取某个URL
- 使用HTTP协议发起网络请求
- 在发起网络请求的过程中,需要将域名转化成IP地址,也就是域名解析
- 得到服务器的响应,此时是二进制的输入流
- 将二进制的输入流转换成HTML文档,并解析内容(我们要抓取的内容,比如标题)。
- 将解除出来的内容保持到数据库
- 记录当前URL,并标记为已爬取,避免下次重复爬取。
- 从当前的HTML文档中,解析出页面中包含的其它URL,以供下次爬取
- 判断解析出来的URL是否已经爬取过了,如果已经爬取就丢弃掉
- 将还没爬取过的URL,存放到等待爬取的URL队列中。
- 重复以上的步骤,指导等待爬取的URL队列中没有数据