Python 爬虫入门(二)HTTP协议初步
Python 爬虫入门(二)HTTP协议初步
HTTP协议初步概述
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP协议中的URL
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
咱们平时见得最多的,应该是URL(UniformResourceLocator,统一资源定位符),而URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息基本URL包含模式(或称协议)、服务器名称(或IP地址)、端口、路径和文件名,如“协议://授权/路径?查询”。
完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志一个完整的URL可以是如下示例:
http://www.smartncepu.cn:8080/wx/Index.aspx?tamp=123&nonce=123&token=123
从上面的URL可以看出,一个完整的URL包括以下几部分:
模式/协议(scheme)
它告诉浏览器如何处理将要打开的文件。最常用的模式是超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP),这个协议可以用来访问网络。其他协议如下:- http——超文本传输协议资源
- https——用安全套接字层传送的超文本传输协议
- ftp——文件传输协议
- mailto——电子邮件地址
- ldap——轻型目录访问协议搜索
- file——当地电脑或网上分享的文件
- news——Usenet新闻组
- gopher——Gopher协议
telnet——Telnet协议
在上述URL例子中的协议部分为“http:”,这代表网页使用的是HTTP协议。在”HTTP:”后面的“//”为分隔符在Internet中可以使用上述多种协议,如HTTP,FTP等等。
服务器名称(或IP地址)
在上述URL例子中,填写的是www.smartncepu.cn这个域名。在实际访问中,会调用DNS解析服务,将域名映射成IP地址。所以,该部分既可以使用域名也可以使用IP地址。端口部分
跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口如http访问默认就是80。路径目录部分
从域名后的第一个“/”开始到最后一个“/”为止,是路径部分。在配置网站的时候,会经常采用虚拟路径来映射实际的物理路径,但是虚拟目录也不是一个URL必须的部分。在上述例子中/wx/就是一个虚拟路径。文件名部分
从域名后的最后一个“/”开始到“?”为止,是文件名部分。往往有些时候没有“?”,那么则是从域名后的最后一个“/”开始到“#”为止,是文件部分。如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“Index.aspx”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认页的文件名参数部分
从“?”开始到结尾的部分为参数部分,又称查询部分。本例中的参数部分为“tamp=123&nonce=123&token=123”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。而通过这种直接访问域名,将参数添加到URL中访问的方式称为get方法。接下来的部分将详细介绍两种常用的方法:get和post方法