URL只是统一定义了资源在网络中的位置,但是并没有解决如何在网络中获取到URL,以及客户端与服务器端报文是如何交互的。目前在网络中常用到的客户端与服务器端获取到URL资源的协议为HTTP和HTTPS协议。
HTTP全称为The Hypertext Transfer Protocol超文本传输协议,它是一种分布式,合作式,超媒体信息系统应协作,是随着互联网一起诞生于1990年,最新版本为HTTP1.1, RFC2616,当前互联网比较常见的为HTTPS协议,它是http的协议变种,主要http协议加入了SSL层,可以成为HTTP的安全版本,主要为了解决HTTP协议中的安全问题,所有传输的内容都是经过SSL加密,但是http是基础,一般都需要先了解http协议,可以学习RFC2616协议,对http1.1协议做了规定。
RFC2616中指出, http协议是一种请求/回应协议(当然目前RFC大部分协议都是基于请求/回应机制),一般都是由客户端向服务器端发生请求协议,请求协议一般包括请求方法,URL,版本号等等信息,服务器端根据请求消息内容作出一定的回应,一般包括状态行,消息头等等内容,其官方解释如下:
消息结构
http的消息结构主要分为两个消息类型,一个是客户端请求消息,一个是服务器响应消息。
客户端发送一个HTTP请求消息主要包括:请求行(request line),请求头部(request header),空行和请求数据四个部分,一般格式为:
服务器响应消息主要分为:状态行,消息报头,空行和响应正文
可以查看W3Cschool 进行详细学习。
利用chrome查看http协议
在网络爬虫中需要经常使用浏览器来分析http协议,最后使用python来模拟浏览器的行为来自动抓取到自己所需要的信息,一般推荐使用chrome浏览器,按'F12'点击network可以抓取到打开一个URL整个协议交互过程,
为了便于分析,浏览器中一般将http 协议分为以下:General, Response Header,Request Headers,请求体以及响应体几个部分进行展示,比上述按照客户端请求消息和服务器端请求消息类型展示方便了很多,也便于分析和学习。
General
General即使通用部分,其内容部分主要如下:
其格式都是遵循Key: value形式,主要重要的信息有:
Request URL:客户端用于向服务器端发生的URL的地址即客户端需要获取到的资源
Request Method:客户端向服务器端发起请求的方法,常见的方法有GET 和POST:
Get一般请求的URL里面包括请求的参数,而POST请求的参数一般会通过表单的形式传输,一般涉及到密码等涉及到安全的信息都是通过POST传递,Get提交的数据长度最多有1024个字节,而POST没有限制。
RFC2616协议中所支持method方法如下:
Status Code:为服务器返回的请求的URL状态码,状态码后面再详细介绍,200为服务器正常。
Remote Address:远程服务器的地址和端口
Referrer Policy:为referre 判断策略
Request Headers
request hearder主要显示的是客户端向服务器端发生请求信息的中请求头部信息:
请求头中的一些关键信息:
Accept: 请把报文头域,主要是显示客户端可以接受哪些类型的信息
Accept-Encodeing:制定客户端接受的内容编码
Accept-Language:指定客户端可接受的语言类型。
Host: 用于指定请求资源的主机名,HTTP1.1版本,必须包含此内容。host格式如下:
Host = "Host" ":" host [ ":" port ]
其端口号缺省为Http 80
Cookie:主要是为了辨别用户进行会话跟踪而存储在用户本地的数据,可以维持当前访问会话
Referer:主要是用来标识这个请求是从哪个网页发过来的,服务器可以拿到这些信息做相应处理,如来源统计,防盗链处理等。
User-Agent:是一个特殊的字符串,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装成浏览器,如果不加,很可能被识别为爬虫
Content-Type:互联网媒体类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息
请求体
请求体一般承载的内容是POST请求中的表单数据,如果为GET请求,则请求体则为空:
Response Headers
响应头为服务器对客户端请求的应答响应消息头:
主要字段解释:
Date:标识响应产生的时间
Last-Modified:指定资源的最后修改时间
Content-Encoding:指定响应内容的编码
Server:包含服务器的信息,比如名称、版本号等
Content-Type:文档类型,指定返回的数据类型是什么,如text/html等
Set-Cookie:设置Cookies。响应头中的set-cookie告诉浏览器需要将此内容放在cookies中,下次请求携带cookies请求
Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。
响应体
响应体是服务器返回给客户端的内容,所响应的数据都在响应体中,一般是HTML代码或者是图片的二进制数据等,它正是我们爬虫所需要的数据
可以在response中查看响应体代码,下面是一个淘宝首页的响应体html代码:
上述传递的只是HTML代码,至于在前端如何显示一般还要进行一定程度的渲染,以便是网页更加酷炫。一个网页主要包含三个部分HTML,CSS,JavaScript等三个部分,HTML是主题代码纯文本形式的,对版面进行排版还需要用到JavaScript和CSS.
对于做网络爬虫本质就是默认浏览器的行为,获取到HTML里面的内容 ,并解析所需要的数据