本篇博文主要介绍网络爬虫的基本概念、工作原理以及开发环境。
我们为什么要了解网络爬虫? 因为当今从事科学研究等,需要大量的数据,但是这些数据公开的又非常的少,大量的数据都在大公司的手中。我们这些普通人本身并没有那么多数据,但是我们又需要大量的数据。那么,这时我们就需要用到网络爬虫了。
一、什么是网络爬虫
网络爬虫英文名叫Web Crawler(又称Web Spiader),是一种自动浏览网页并采集你所需要的信息的程序,被广泛用于互联网搜索引擎(称为通用爬虫)。随着互联网的发展,爬虫技术不再局限于搜索领域,任何人都可以利用爬虫技术从互联网上获取自己想要的信息,如爬取电子书、商品价格等(称为垂直爬虫)。
何谓网络爬虫:
1、爬虫产生的背景
1.1、万维网的高速发展
- 网页数量增加
- 网页承载的信息量增加
- 网络的拓扑结构复杂化
1.2、搜索引擎的需要
- 提供充分的搜索服务
- 提供精准的搜索结果
- 提供丰富的搜索信息
1.3、领域研究的需要
- 研究网络结构的需要网络关系
- 研究语言的需要语料材料
- 研究用户行为的需要用户资料
2、爬虫的概念
爬取网页:
- 按照一定的规则,自动地抓取万维网信息地程序或者脚本
抽取信息
- 部分或全部抽取抓取到的信息,使数据进一步结构化
存储信息
- 将获取到的信息保存到文件或数据库中
3、网络爬虫的对象
网站website
- 新闻类网站
- 社交类网站
- 购物类网站
- 所有你想爬的网站
API
- 天气类API
- 微博类API
- 只要你能被认证的API
流量数据
- 弹幕
- 只要有弹幕的地方
4、网络爬虫的重要性
从工业角度看
- 数据驱动大量数据来源于网络爬虫
- 爬虫的效率决定信息更迭的速度
- 爬虫的准确性决定了服务的准确度
从研究角度看
- 研究领域需要干净的数据
- 研究领域需要不花钱的数据
- 几乎所有社交网络研究的benchmark数据都来自爬虫
可在工业领域独当一面
- 有数据的地方都有爬虫
- 爬虫是一个闭环的独立工程
- 所有的数据分析都是由爬虫开始
可自己做研究
- 自己收集数据
- 自己清理数据
- 自己运算算法
- 自己搞研究。
二、爬虫的使用范围
- 是数据产生二次价值的第一步
- 数据分析师的必备技能
- 网站测试者的好伙伴
我们在使用网络爬虫时,需要遵守Robots协议。
三、爬虫的分类
1、深度优先爬虫和广度优先爬虫
①深度优先爬虫
- 深度优先是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续追踪链接。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独地一条链。
②广度优先爬虫
- 广度优先,有人也叫宽度优先,是指将新下载网页发现地链接直接插入到待抓取URL队列的末尾,也就是指网络爬虫会先抓取起始页中的所有网页,然后在选择其中的一个连接网页,继续徐抓取在此网页中链接的所有网页。
2、静态网页爬虫和动态网页爬虫
①静态网页爬虫
- 面向网页读取过程中就完成加载的网页,此类网页的主要信息会在网页加载过程中直接显示在页面上,比如一些新闻网站和比较老的网站。面向静态网页的爬虫页面逻辑比较简单,几行代码就可以完成爬取。
②动态网页爬虫
- 网页读取过程中需要依赖额外的加载过程,比如JavaScript或者jQuery,使用静态网页的爬取方法可能获取不到数据,需要模拟动态加载过程。
- 网页登录过程分页,需要模拟下拉、点击等操作才能加载剩余数据
- 需要登录
3、泛用和主题爬虫
①泛用爬虫
- 普通的没有策略和着重爬取的爬虫,由于可能会爬取一些无用的数据,效率比较低
②主题爬虫
- 指选择性地爬取那些于预先定义好地主题相关页面地网络爬虫。和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关地页面,极大地节省了硬件和网络资源,保存地页面也由于数量少而更新块,还可以很好地满足一些特定人群对特定领域信息的需求。
四、爬虫的基本架构
- 网络爬虫的基本架构
需要和实现有一部分我们需要用到辅助模块。
- 爬虫的爬取过程:
- 爬虫的爬取过程解析:
①爬取模块——从万维网上获取数据
- 从一个URL开始批量的获取数据
- 将数据从互联网的海量信息中拉取到爬虫系统中进行处理
②抽取模块——处理获取的数据抽取指定的信息
- 抽取URL加入队列,使程序持久化
- 将原本被HTML、XML、JSON结构化的数据进一步结构化,方便数据库存储
③数据存储模块——将抽取的信息存入指定格式的载体
- 将抽取的信息存入txt、csv、数据库等常见的数据存储中
- 为爬虫提供数据索引,使得爬虫队列可以通过读取数据存储的方式控制爬虫运转
④辅助模块——持久化、队列与多线程
- 持久化 使爬虫可以尽可能长时间稳定运转 控制爬取速度,合理规避简单反爬规则
- 队列 控制爬虫爬取的顺序,实现深度或广度优先策略 承载URL,提供去冲、排序等操作
- 多线程 提高爬虫效率