网络爬虫综述-最全汇总版

2019.1.2更新

一.网络爬虫概念

网络爬虫(网页蜘蛛,网络机器人或网页追逐者),是按照一定规则自动抓取万维网信息的程序或脚本。网络爬虫由控制节点、爬虫节点和资源库组成,网络爬虫按照实现技术和结构可分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫等类型,在实际的网络爬虫中,通常是这几类爬虫的综合体

传统爬虫通常从一个或若干个初始网页的URL开始,在抓取网页的过程中,不断从当前页面上抽取新的URL放到URL队列中,直到满足系统的一定停止条件。聚焦网络爬虫主要由初始化的URL集合、URL队列、页面爬行模块、页面分析模块、链接过滤模块(网页分析算法过滤与主题无关的链接)、内容评价模块、链接评价模块、资源数据库(页面数据库-存储爬取内容、索引数据库-页面分析处理结果等)等构成

二.HTTP协议

任何复杂的浏览器行为,都可准确拆分为JS逻辑和HTTP行为,故对HTTP的理解和分析至关重要。HTTP协议是计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。对R语言进行设置使其具备与服务器及WEB服务进行通信的能力(网络通信的通用语言是HTTP-超文本传输协议-hypertext transfer protocol)超文本协议是一种用于分布式、协作式和超媒体信息系统的应用层协议(用于从www服务器传输超文本到本地浏览器的传输协议),是一个客户端终端(用户)和服务器终端(网站)请求和应答的标准(TCP),通过使用网页浏览器、网络爬虫或者其他工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)来获取网络资源的过程

超文本指HTML文件、图片文件、查询结果等,但不涉及数据包的传输

HTTP协议的特点:1.支持客户端/服务器模式;2.简单快捷,客户端只需向服务器传送请求方法(GET,POST,HEAD)和路径,HTTP服务器程序规模小,故通信速度快;3.灵活,允许传输任意类型的数据对象;4.无连接,限制每次连接只处理一个请求,服务器处理完客户的请求,收到客户端的应答后即断开连接;5.无状态,HTTP协议是无状态协议,即对事务的处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,它必须重新传送

浏览器通过HTTP协议构建请求+服务器响应请求:HTTP客户端首先把主机翻译成IP地址并在缺省的HTTP端口(80端口)建立到服务器的连接。请求和响应过程(http报文)如下:

--客户端会话信息
About to connect() to china.nba.com port 80 (#0)
  Trying 127.0.0.1:50049... connected
Connected to china.nba.com(127.0.0.1:50049) port 80 (#0)
Connected #0 to host china.nba.com left intact
--建立连接后,服务器会等待请求,浏览器向服务器发送如下的HTTP请求
GET /index.html  HTTP/1.1
Host: china.nba.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 
(KHTML, like Gecko)Chrome/49.0.2623.221 Safari/537.36 SE 
Host 服务器地址 
Accept 浏览器端可以接受的媒体类型,text/html
Accept-encoding 浏览器接收的编码方法,通常指的是压缩方法
Accept-language 浏览器声明自己接收的语言
User-agent 告诉服务器客户端的操作系统、浏览器版本
Cookie 最重要的请求报头成分,辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
Referer 参照页地址,也就是在浏览器看到的想要抓取的内容主页
Connection 客户端与服务器的连接状态
edu-script-token 随机参数-每打开一次浏览器都会变动 

2.X MetaSr 1.0
--服务器响应浏览器请求
HTTP/1.1 200 OK
Date:Thu, 14 Sep 2017 06:34:35 GMT
Server:squid/3.5.20           --服务器软件信息
Keep-Alive:timeout=38
Vary:Accept-Encoding
...
<!DOCTYPE html>
<html>
<head>
--在接受了所有数据之后,连接会被浏览器关闭,一次访问结束
closing connection #0

三.网页访问的过程

1.浏览器拿到网址后先将主机名解析出来,例: http://www.baidu.com/index.html 则会将主机名 www.baidu.com 解析

2.根据主机名查找IP,首先查询hosts文件,成功则返回对应的IP地址,如果没有查询到,则去DNS服务器查询,成功则返回IP,否则报连接错误

3.发送HTTP请求,浏览器将自身信息+请求相关信息封装成HTTP请求消息发送给服务器

4.服务器处理请求,服务器读取HTTP请求中的内容,在经过解析主机、解析站点名称、解析访问资源后,会查找相关资源(找到-返回状态码200,失败-返回404,此时可按照程序员的设置跳转到别的界面)

5.服务器返回HTTP响应,浏览器得到返回数据后可提取数据,然后调用解析内核进行翻译,最后显示出界面,之后浏览器会对其引用的文件如图片、CSS、JS等不断进行上述过程,直到所有文件都被下载下来,网页显示

四.URL语法

URL即网址,全称为统一资源定位符(uniform resource locators)不是HTTP的一部分,但能够通过URL直观地进行HTTP和其他协议的通信

--scheme表示url模式,定义浏览器和服务器之间通信所采用的协议(http,https,ftp)主机名提供存放感兴趣资源服务器名字(服务器的唯一标识符),端口号一般默认为80,主机名+端口号告诉浏览器去敲哪一扇门才能访问请求的资源,之后的路径用来确定被请求资源在服务器上的位置,与文件系统类似用/符号分段.在多数情况下,url路径里会提供很多补充信息,帮助服务器正确处理一些复杂请求,比如类似name=value这样的查询字符串来获取更多的信息,或用#符号来指定网页中特定的部分
scheme://hostname:port/path?querystring#fragment
--实例
http://nbachina.qq.com/a/20170914/004815.htm

--url是通过ASCII字符集进行编码,所有不在128个字符集里面的字符和特殊字符串都需要转义编码为标准的表示法(url编码也被称为百分号编码)
char<-"Golden states Worriors is the NBA Champion in 2017"
URLencode(char,reserve=TRUE)
[1]"Golden%20states%20Worriors%20is%20the%20NBA%20Champion%20in%202017"
URLdecode(char)
[1] "Golden states Worriors is the NBA Champion in 2017"

五.HTTP请求消息

HTTP消息:无论是请求模式或者响应模式,都是由起始行start line,标头header,正文entity-body三部分组成。常见的HTTP请求方法:

HTTP请求:请求行、消息报头、请求正文

方法

描述

GET

从服务器检索资源(request-url标识),不会在请求的正文中发送任何内容

POST

利用消息向服务器发送数据,然后从服务器检索资源

HEAD

从服务器检索资源,但只响应起始行和报头

PUT

将请求的正文保存在服务器上

DELETE

从服务器删除一个资源

TRACE

追踪消息到达服务器沿途的路径,用于测试或诊断

OPTIONS

返回支持的HTTP方法清单

CONNECT

建立一个网络连接

 

六.状态码

HTTP响应:状态行,消息报头,响应正文

状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF,其中HTTP-Version表示服务器HTTP协议版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述

状态码:浏览器发送请求后,服务器需要对其响应,在响应的起始行发回一个状态码

常见的HTTP状态码如下所示:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

常见的状态代码,状态描述
200 OK      //客户端请求成功
400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden  //服务器收到请求,但是拒绝提供服务
404 Not Found  //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期错误
503 Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

七.HTTP与HTTPS的区别

HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了web浏览器和服务器之间的传输报文,就可直接读懂其中的信息,因此不适合传输一些敏感信息如卡号、密码等。为了数据传输安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依据证书验证服务器身份(确认网站的真实性),并为浏览器和服务器之间的通信加密(建立信息安全通道)

HTTPS是以安全为目标的HTTP通道,HTTPS的安全基础是SSL;HTTPS协议需要到ca申请证书,但免费证书较少,因而需要一定费用;两者使用完全不同的连接方式,用的端口也不同,HTTP是80,HTTPS是443

HTTPS的工作原理:1.客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接;2.Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端;3.客户端的浏览器与Web服务器开始协商SSL连接的安全等级即信息加密的等级;4.客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站;5.Web服务器利用自己的私钥解密出会话密钥;6.Web服务器利用会话密钥加密与客户端之间的通信

HTTPS优点:1.使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;2.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全,可防止数据在传输过程中不被窃取改变,确保数据的完整性;3.HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本;4.谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”

HTTPS缺点:1.HTTPS协议握手阶段比较费时,会使页面的加载时间延长50%,增加10%-20%耗电;2.HTTPS连接缓存不如HTTP高效,增加了数据开销和功耗,甚至已有的安全措施都受到影响;3.SSL证书需要钱,功能越强大的证书费用越高;4.HTTPS协议的加密范围比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的是SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

八.持久连接

HTTP1.1(所有连接默认都是持久连接)和部分HTTP1.0(内部并未标准化)使用持久连接的方法,称HTTP keep-alive,只要任意一端没有明确提出断开连接,则继续保持TCP连接状态

持久连接的好处在于减少TCP连接重复建立、断开所造成的额外开销,减轻服务器端负载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值