2.1.1 URI 和 URL
URI : 统一资源标志符(Uniform Resource Identifier)
URL : 统一资源定位符(Uneverial Resource Locator)
例: https://github.com/favicon.ico 是 GitHub 的网站图标链接,它是一个URL,也是一个URI。
URL 是 URI 的子集,也就是说每个URL都是URI,但不是每个URI都是URL
URI还包括一个子类叫做URN(Universal Resource Name),即:统一资源名称
目前互联网中,URN用得非常少,所以几乎所有的URI都是URL,一般的网页我们即可以称为URL,也可以称为URI。
2.1.2 超文本
超文本: hypertext
网页的源代码HTML就可以称为超文本。
2.1.3 HTTP和HTTPS
如在淘宝的首页: https://www.taobao.com/ 中,URL的开头会有http,这就是访问资源需要的协议类型
HTTP 全称:超文本传输协议(Hyper Text Transfer Protocol)
HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能够保证高效而准确地传送超文本文档。
HTTPS 全称:Hyper Text Transfer Protocol over Secure Socket Layer, 是以安全为目标的HTTP通道,简单地说就是HTTP的安全版,即HTTP下加入SSL层,简称HTTPS。
HTTPS 的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用可以分为两种:
- 建立一个信息安全通道来保证数据传输的安全
- 确认网站的真实性,凡是使用HTTPS的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询。
注: 有些网站虽然使用了HTTPS协议,但还是会被浏览器提示为不安全。 如果要爬取这样的站点,就要设置忽略证书的选项,否则会提示SSL链接错误
2.1.4 HTTP请求过程
我们在浏览器中输入一个URL, 回车之后就会在浏览器中观察到网页内容。
实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器收到这个请求后进行处理和解析,然后返回对应的响应接着传回给浏览器。
响应中包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现出来。
在Chrome浏览器中,右击“检查”,能够进入开发者模式。
- 图1:开发者模式截图
- 图2:网络请求条目
对第一个网络请求,即 www.baidu.com
其中各列的含义如下:
-
第一列 Name :请求的名称,一般会将URL的最后一部分内容当做名称。
-
第二列 Status:响应的状态码。200代表响应是正常的。通过状态码,我们可以判断发送了请求之后是否得到了正常的响应。
-
第三列 Type: 请求的文档类型。这里是document,代表我们请求的是一个HTML文档,内容是一些HTML代码
-
第四列 Initiator: 请求源。用来标记请求是由哪个对象或进程发起的
-
第五列 Size: 从服务器下载的文件和请求的资源大小。如果是从缓存中取得的资源,则该列会显示 from cache
-
第六列 Time :发起请求到获取响应所用的总时间。
-
第七列Waterfall:网络请求的可视化瀑布流
- 图3:详细信息
- General部分:
- Request URL: 是请求的URL
- Request Method: 是请求的方法
- Status Code: 是响应状态码
- Remote Address: 是远程服务器的地址和端口
- Referrer Policy: 是Referrer判别策略
- Response Headers :代表响应头
- 是响应的一部分,例如其中包含了服务器的类型,文档类型,日期等信息,浏览器接受响应后,会解析响应内容,进而呈现网页内容。
- Request Headers :代表请求头
- 请求头中包含许多请求信息,例如浏览器标识,Cookies,Host等信息,这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法,进而最初响应的响应。
2.1.5 请求
请求,由客户端向服务器发出,可以分为4部分内容:
- 请求方法(Request Method)
- 请求的网址(Request URL)
- 请求头(Request Headers)
- 请求体(Request Body)
1. 请求方法
常见的请求方法有两种:GET 和 POST
GET 和 POST请求方法有如下区别:
- 请求中的参数包含在URL里面, 数据可以在URL中看到, 而POST请求的URL不会包含这些数据, 数据都是通过表单形式传输的,会包含在请求体中
- GET请求提交的数据最多只有1024字节,而POST方式没有限制。
其他的请求方法:
方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 大多用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从给客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当做跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
2. 请求的网址
即统一资源定位符URL,它可以唯一确定我们想要请求的资源
3. 请求头
请求头,常用来说明服务器要使用的附加信息,比较重要的信息有:Cookies, Referer, User-Agent 等。
下面简要说明一些常用的头信息:
-
Accept:请求报头域,用于指定客户端可接受那些类型的信息
-
Accept-Language: 指定客户端可接受的语言类型
-
Accept-Encoding: 指定客户端可接受的内容编码
-
Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。
-
Cookies:这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。 它的主要功能是维持当前访问会话。 Cookies里面有信息标识了我们所对应的服务器的会话,每次浏览器再请求该站点的页面时,都会在请求头中加上Cookies并将其发送给服务器,服务器通过Cookies识别是我们自己,并且查出当前状态是登陆状态,所以返回结果就是登陆之后才能看到的网页内容。
-
Referer: 标识这个请求是从哪个页面发过来的,服务器可以拿这一信息并做相应处理,如做来源统计,防盗链处理等。
-
User-Agent: 简称UA,是一个特殊的字符串头,可以是服务器识别客户使用的操作系统及版本,浏览器及版本等。在做爬虫时加上这个信息,可以伪装为浏览器;如果不加,可能就会被识别出为爬虫。
-
Content-Type:也叫做互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息投中,它用来表示具体请求中的媒体类型信息。如:text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。
4. 请求体
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体为空。
- 表: Content-Type 和 POST提交数据方式的关系
Content-Type | 提交数据的方式 |
---|---|
application/x-www-form-urlencoded | 表单数据 |
multipart/form-data | 表单文件上传 |
application/json | 序列化JSON数据 |
text/xml | XML数据 |
2.1.6 响应
响应,由服务器端返回给客户端,可以分为3个部分:
- 响应状态码(Response Status Code)
- 响应头(Response Headers)
- 响应体(Response Body)
1. 响应状态码
响应状态码表示服务器的响应状态。
如:
- 200:表示服务器响应正常
- 404:表示页面未找到
- 500:表示服务器内部发生错误
更多错误可查阅书籍或网络
2. 响应头
响应头包含了服务器对请求的应答信息,如Content-Type,Server,Set-Cookie等。
下面列举一些常用的头信息:
-
Data: 标识响应产生的时间
-
Last-Modified:指定资源的最后修改时间
-
Content-Encoding:指定响应内容的编码
-
Server:包含服务器的信息,比如名称,版本号等
-
Content-Type:文档类型,指定返回的数据类型是什么。
-
Set-Cookies:设置Cookies。响应头的Set-Cookies告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求
3. 响应体
响应的正文数据都在响应体中,比如网页请求,它的响应体就是网页的HTML代码;请求一张图片时,它的响应体就是图片的二进制数据。
做爬虫请求网页后,要解析的内容就是响应体。
在浏览器开发者工具中点击 preview ,就可以看到网页的源代码,也就是响应体的内容,它是解析的目标。
在做爬虫时,我们主要通过响应体得到网页的源代码,JSON数据等,然后从中做相应内容的提取。