爬虫入门01(笔记)
你有没有对网络搜索引擎例如百度,Google等如何建立对其他网站的索引而感到好奇,那么你就得先了解爬虫,而这篇文章则是基于解密大数据社群曾老师所开设的爬虫入门课所写的笔记,如果你对解密大数据社群或是对爬虫感兴趣,具体链接附在文末。
本文主要介绍了一下几个方面:
- 爬虫的定义
- 爬虫的发展史
- 爬虫的作用及运用场景
- 爬虫的分类
- 一些开源爬虫
- 爬虫的运行过程
- 爬虫的设计简介
爬虫的定义
爬虫是遵循一定的网络协议(http(s)、ftp、robots协议等)和规则(页面下载、结构分析、格式化等)在互联网上自动获取数据,可以在电脑上运行的程序或脚本(spider)
下面将几个网络协议分别介绍一下:
-
http(超本文传输协定 HyperText Transfer Protocol):这是网络上应用最为广泛的一种网络协议。http是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、爬虫或其他的工具,客户端发起一个http请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程式(user agent)。应答的服务器上存储着一些资源,比如HTML文件或图像。我们称这个应答器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理伺服器、网关、或者隧道(tunner)。
-
https(超文本传输安全协定 HyperText Transfer Protocol secure):这是一种网络安全传输协议。在计算机网络上,https仅有超本文传输协议进行通讯,但利用SSL/TLS来加密封包。https开发的主要目的是提供对网络伺服器的身份验证,保护交换资料的隐私和完整性。https的URL起始且默认端口为443。
-
FTP:(文件传输协议 File Transfer Protocol):这是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。属于网络传输协议的应用层。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理。但是FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据的时间,会非常长;并且不时的执行一些冗长的登录过程。FTP一般运行在20和21两个端口,端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。运行FTP服务的很多站点都开放匿名服务,在这种设置下,用户不需要账号就可以登录服务器,默认情况下,匿名用户的用户是:“anonymous”。这个账号不需要密码。
FTP实现的目标是:- 促进文件的共享(计算机程序或数据)
- 鼓励间接或者隐式的使用远程计算机
- 向用户屏蔽不同主机中各种文件存储系统(File sysytem)的细节
- 可靠和高效的传输数据。
FTP的缺点是:
- 密码和文件内容都使用明文传输,可能发生窃听。
- 因为必须开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题,通过使用被动模式的FTP,得到了很大解决。
- 服务器可能会被告知连接一个第三方计算机的保留端口。
- 此方式在需要传输档案数量很多的小档案时,效能不好。
-
robot.txt协议并不是一个规范,而是约定俗成的,并不能保证网站的隐私。robots.txt是一种存放于网站根目录下的ASCII编码的文本文件,他通常告诉网络搜索引擎的漫游器(爬虫),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robot.txt的文件名应统一为小写。下面举几个例子:
允许所有的机器人:
User-agent:*
Disallow:
另一写法:
User-agent:*
Allow:/
仅允许特定的机器人(name_spider用真实名字代替):
User-agent:name_spider
Allow:/
拦截所有的机器人:
User-agent:*
Disallow:/
禁止所有机器人访问特定目录:
User-agent:*
Disallow:/cgi-bin/
Disallow:/images/
Disallow:/tmp/
Disallow:/private/
仅禁止坏爬虫访问特定目录(BadBot用真实名字代替):
User-agent:BadBot
Disallow:/private/
禁止所有机器人访问特定文件类型:
User-agent:*
Disallow:/.php$
Disallow:/.js$
Disallow:/.inc$
Disallow:/.css$
下图是一个非常简化的爬虫示意图
web1、web2、web3、web4是四个网页,现在有一个爬虫服务器要爬取四个网页的东西,最开始选择了种子节点,web1和web2,web1有链接指向web3和web4,我们就可以通过web1上相关其他网页的地址爬取web3和web4上的地址,从而爬取web3和web4上的内容,这就是一个爬虫爬取数据的方式。
爬虫的发展史
公认的第一个互联网爬虫是Wanderer(MIT,Matthew Gray,1993)。最开始的爬虫是检索和收集域名。慢慢地这些功能不够用了,出现了全网爬虫,其作用是通过各种方式爬取全网络的信息,将其收集起来,供用户使用,如一些搜索引擎。但随着网页的增多,搜索引擎开始比较各网页的权重,来决定各网站的顺序。这种情况下,SEO(search engine optimization,搜索引擎最佳化)出现了。SEO是一种透过了解搜寻引擎的运作规则来调整网站,以及提高目的网站在有关搜索引擎内排名的方式。
爬虫的作用及运用场景
爬虫可以从网络中获取数据,用于(商业)数据收集、分析、筛选、模型训练、大数据处理、舆情分析等。
爬虫可以运用于微博热点、实时汇率、某只关注股价的实时价格信息、历史房产交易数据、商品价格等。主要可以概括为两类:(1)实时获取数据(数据时效敏感),如交易类。(2)定时获取数据(数据时效不敏感),如数据分析。
爬虫的分类
爬虫有很多种类,以下是最常见的四种。
- 通用网络爬虫
深度优先,广度优先,主要用于搜索引擎爬取 - 主题爬虫
针对性的只爬取预先设定主题相关内容 - 增量爬虫
只爬取增量内容 - 深层网络爬虫
爬取需要动态加载(js异步更新)或者(模拟)人机交互之后才能展示的内容
注:
- 深度优先:一个界面上有许多地址,我们顺着一个地址往下爬取,一直爬到我们设定的结束值,然后再回到上一层,继续爬取另外的地址。
- 广度优先:一个界面上有许多地址,我们先把这些地址全部爬下来,然后在爬取第一个网站下所对应的所有地址,回到上一级,周而复始,一直爬到我们设定的结束值。
- 深层网络爬虫:当网站要通过各种验证,各种手段来进行反爬虫时,所设计的爬虫。
一些开源爬虫
- Python开源爬虫
Scrapy —— 高效的屏幕,网页数据采集
pyspider —— 强大的纯python数据采集系统
portia —— 基于Scrapy的可视化数据采集框架 - php
Goutte —— 基于PHP的网页截屏和爬取程序
pspider —— 基于PHP的并发网络爬虫
php-spider —— 一个基于PHP的高扩展的网络爬虫 - C/C++/C#
httrack —— 全部网站整体复制工具
Spidr —— 全站数据采集,支持无限的网站链接地址采集
mechanize —— 自动采集网站数据的框架 - Java
Creawler4j —— 简单和轻量级的网络爬虫
Apache Nutch —— 用于生产环境的高度可扩展的网络爬虫
Spiderman —— 一个可扩展的,多线程的网络爬虫 - Scala
crawler —— 基于Scala DSL的网络爬虫
scrala —— 有Scala开发scrapy内核的网络爬虫
爬虫的运行过程
- 加载目标站点robot.txt。判断页面是否在允许抓取范围。
- 下载页面:将页面加载到内存。
- 格式化页面:补全标签,过滤非法字符
- 确定规则:正则、css选择器等
- 筛选数据:所需目标元素
- 数据清洗:筛选后元素检查与过滤
- 数据权重计算
- 数据存储
注:
- HTML语法中,大多数元素编 写一个开始标记和结束标记,与其之间的内容,如
<p>语句</p>
其中"< p >"为开始标签,"< /p > "为结束标签。而有些网页会缺少标签,在我们在处理的时候就叫将其补上。 - 而每个语言都有自己的命名规则,非法字符是不能被语言识别的。
- 正则表达式(Regular Expression,在代码中常简写为regax、regaxp或RE)是计算机科学的一个概念。其使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。如“/n”匹配一个换行符。等价于“\x0a”和“\cJ”
- 要使用CSS对HTML页面元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器。每一条CSS样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是“选择器”。 “选择器”指明了{}中的“样式”的作用对象,也就是“样式”作用于网页中的哪些元素。具体可点击这里查看。
爬虫的设计简介
爬虫设计的第一步要筛选数据源,原因如下:
- 网络数据量巨大,个人无法获取所有数据,且没必要获取所有数据
- 有价值的数据总在少数,从庞杂的网络中筛选所需数据,过滤脏数据才是我们的目的
- 能提供数据的网站很多,单个人精力有限
- 数据会不定时更新,个人和一般机构无法监控
如何筛选数据源呢:
- 确定需要的数据
- 选择有所需数据的权威站点(政府网站、官网、专业性网站)
- 选择有所需数据的具体网页(或一类网页)
- 分析网页是否友好,方便爬取
我们找到了好的数据源之后,就可以设计一个爬虫了,我们设计一个爬虫一般要经历以下步骤:
- 分析网址规则
- 分析页面结构
- 设定爬取规则(目标数据)
- 确定数据保存格式(文本、db、csv)
- 编写脚本并运行
注:
- 以简书网为例,介绍一下如何分析网址规则,如下图所示:
- 我们进入一个页面之后,可能页面左边是导航栏,右边是广告,中间是正文内容,我们要爬取的主要内容在中间,所以我们先分析页面结构。
- 我们要爬取的数据是目标页面上有用的一部分,我们只要爬取那一部分有用的内容,来获得目标数据,所以我们要设定爬取规则。
本文为tiger解密大数据社群爬虫入门课第一次课的听课笔记。了解更多关注微信“泰阁志”