网络抓取,就是把URL地址中的网络资源从网络流中读取出来,保存到本地。python中有很多库可以实现抓取,下面先从最基本的urllib讲起(以python3为例,python2中为urllib2)。
HTTP协议简介
概念
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
目前我们使用的是HTTP/1.1 版本。
状态码
概念
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
分类及描述
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见错误码
常见的HTTP状态码:
- 200 请求成功
- 301 资源被永久转移到其他URL
- 404 请求的资源不存在
- 500 服务器内部错误
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
请求方法 | 描述 |
get | 请求指定的页面信息,并返回实体主体 |
post | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
head | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
put | 从客户端向服务器传送的数据取代指定的文档的内容 |
delete | 请求服务器删除指定的页面 |
connect | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
options | 允许客户端查看服务器的性能 |
trace | 回显服务器收到的请求,主要用于测试或诊断 |
HttpRequest
概念及组成
指客户端(浏览器)发送一个请求到服务端,请求消息包括:
请求行 请求头 空行和请求数据四个部分组成
如下所示:
请求消息结构
- 请求行
- 用来说明请求类型,要访问的资源以及使用的HTTP版本
- 请求头
- 紧接着请求行之后的部分,用来说明服务器要使用的附加信息
- 常用的header
- host 指定被请求资源的Internet主机和端口号
- referer 告诉服务器从哪个页面链接过来的
- User-Agent 告知服务器客户端使用的操作系统和浏览器的名称和版本
- Accept 浏览器可以接受的媒体类型
- 空行
- 请求头后面的空行是必须的,即使第四部分的请求数据也为空
- 请求数据,也叫请求体
- 可以添加任意的其他数据
- 一般get请求此处为空,post请求时为传递参数
示例
- get示例
GET /hello.txt HTTP/1.1 #请求行
User-Agent: curl/7.16.3 libcurl/7.16.3 #请求头 OpenSSL/0.9.7l zlib/1.2.3 #请求头
Host: www.example.com #请求头
Accept-Language: en, mi #请求头
- post示例
POST / HTTP1.1 #请求行
Host:www.wrox.com #请求头
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive #请求头
#空行
name=Professional%20Ajax&publisher=Wiley #请求体
HttpResonse
概念及组成
一般情况下,服务器接收并处理客户端发过来的请求后,回返回一个HTTP的相应信息。
响应也由四个部分组成:状态行 消息报头 空行 响应正文
如下:
示例及响应信息解读
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
- 状态行
- 由HTTP协议版本号 状态码 状态消息三部分组成
- 示例中第一行表示状态行,HTTP/1.1表示HTTP版本为1.1,状态码为200,状态消息为ok
- 消息报头
- 说明客户端要使用的一些附加信息
- 第二三行为消息报头,date指生成响应的日期和时间,content-type指定了mime类型的html(text/html),编码类型为utf-8
- 空行
- 消息报头后面的空行是必须的
- 响应正文
- 服务器返回给客户端的文本信息
- 示例中空行后面的HTML为响应正文
小结
HTTP协议相关内容简单就介绍到这了,了解这些内容,才能更轻松的进入后续的爬虫讲解,so,汤圆节快乐哦~