Python网络爬虫技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 互联网、HTTP与HTML

1.4.1 互联网与HTTP

互联网也叫作国际网(Internet),是指网络与网络之间所串连成的庞大网络,这些网络以一组标准的网络TCP/IP协议族相连,连接全世界几十亿个设备,形成逻辑上的单一巨大国际网络。它是由从地方到全球范围内几百万个私人的、学术界的、企业的和政府的网络所构成,通过电子、无线和光纤网络技术等一系列广泛的技术联系在一起。这种将计算机网络互相连接在一起的方法可称作“网络互联”,在这基础上发展出覆盖全世界的全球性互联网络称为互联网,即是互相连接在一起的网络。

提示:互联网并不等于万维网(WWW),万维网只是一个基于超文本相互链接而成的全球性系统,且是互联网所能提供的服务其中之一。互联网带有范围广泛的信息资源和服务,例如相互关系的超文本文件,还有万维网的应用,支持电子邮件的基础设施、点对点网络、文件共享,以及IP电话服务。

HTTP是一个客户端终端(用户)和服务器端(网站)请求与应答的标准。通过使用网页浏览器、网络爬虫或者其他工具,客户端可以发起一个HTTP请求到服务器上的指定端口(默认端口为80),称这个客户端为用户代理程序(User Agent)。应答的服务器上存储着一些资源,比如HTML文件和图像,称这个应答服务器为源服务器(Origin Server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(Tunnel)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中并没有规定必须使用它或它支持的层。

事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的内容,如请求的文件、错误消息或者其他信息。

HTTP的请求方法有很多种,主要包括:

●GET,向指定的资源发出“显示”请求。使用GET方法应该只用于读取数据,而不应当被用于产生“副作用”的操作中(如在Web Application中)。其中一个原因是GET可能会被网络蜘蛛等随意访问。

●HEAD,与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的内容部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

●POST,向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

●PUT,向指定资源位置上传其最新内容。

●DELETE,请求服务器删除Request-URI所标识的资源。

●TRACE,回显服务器收到的请求,主要用于测试或诊断。

●OPTIONS,这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*”来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

●CONNECT,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。CONNECT通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器),方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

1.4.2 HTML

HTML则是指超文本标记语言(HyperText Markup Language, HTML),是一种用于创建网页的标准标记语言。与HTTP不同的是,HTML是一种基础技术,常与CSS、JavaScript一起被众多网站用于设计令人赏心悦目的网页、网页应用程序以及移动应用程序的用户界面。网页浏览器可以读取HTML文件,并将其渲染成可视化网页。HTML描述了一个网站的结构语义随着线索的呈现方式,使之成为一种标记语言而非编程语言。HTML元素是构建网站的基石。HTML允许嵌入图像与对象,并且可以用于创建交互式表单,它被用来结构化信息(例如标题、段落和列表等),也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素(如<html>),浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。HTML可以嵌入脚本语言(如JavaScript),它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其他元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素。

HTML标记包含标签(及其属性)、基于字符的数据类型、字符引用和实体引用等几个关键部分。HTML标签是最常见的,通常成对出现,比如<h1>与</h1>。这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容,有些标签没有内容,为空元素,如<img>。HTML另一个重要组成部分为文档类型声明,这会触发标准模式渲染。

HTML文档由嵌套的HTML元素构成。它们用HTML标签表示,包含于尖括号中,如<p>在一般情况下,一个元素由一对标签表示:“开始标签”<p>与“结束标签”</p>。元素如果含有文本内容,就被放置在这些标签之间。在开始与结束标签之间也可以封装另外的标签,包括标签与文本的混合。这些嵌套元素是父元素的子元素。开始标签也可包含标签属性,这些属性有诸如标识文档区段、将样式信息绑定到文档演示和为一些如<img>等的标签嵌入图像、引用图像来源等作用。一些元素如换行符<br>,不允许嵌入任何内容,无论是文字或其他标签。这些元素只需要一个单一的空标签(类似于一个开始标签),无须结束标签。许多标签是可选的,尤其是那些很常用的段落元素<p>的闭合端标签。HTML浏览器或其他媒介可以从上下文识别出元素的闭合端以及由HTML标准所定义的结构规则,这些规则非常复杂。

因此,一个HTML元素的一般形式为:<标签 属性1="值1" 属性2="值2">内容</标签>。一个HTML元素的名称即为标签使用的名称。注意,结束标签的名称前面有一个斜杠“/”,空元素不需要也不允许结束标签。如果元素属性未标明,则使用其默认值。

HTML文档的页眉:<head>…</head>。标题被包含在头部,例如:

标题:HTML标题由<h1>到<h6>六个标签构成,字体由大到小递减:

段落:

换行:<br>。<br>与<p>之间的差异在于,“br”换行但不改变页面的语义结构,而“p”部分的页面成段。

链接:使用<a>标签来创建链接。href=属性包含链接的URL地址。

注释:

大多数元素的属性以“名称-值”的形式成对出现,由“=”分离并写在开始标签元素名之后。值一般由单引号或双引号包围,有些值的内容包含特定字符,在HTML中可以去掉引号(XHTML则不行)。不加引号的属性值被认为是不安全的。有些属性无须成对出现,仅存在于开始标签中即可影响元素,如img元素的ismap属性。要注意的是,许多元素存在一些共通的属性:

●id属性为元素提供了在全文档内的唯一标识。它用于识别元素,以便样式表可以改变其表现属性,脚本可以改变、显示或删除其内容或格式化。对于添加到页面的URL,它为元素提供了一个全局唯一标识,通常为页面的子章节。

●class属性提供一种将类似元素分类的方式,常被用于语义化或格式化。例如,一个HTML文档可指定类class="标记"来表明所有具有这一类值的元素都从属于文档的主文本。格式化后,这样的元素可能会聚集在一起,并作为页面脚注而不会出现在HTML代码中。类属性也被用于微格式的语义化。类值也可进行多声明,如class="标记 重要"将元素同时放入“标记”与“重要”两类中。

●style属性可以将表现性质赋予一个特定元素。比起使用id或class属性从样式表中选择元素,“style”被认为是一个更好的做法,尽管有时这对一个简单、专用或特别的样式显得太烦琐。

●title属性用于给元素一个附加的说明。大多数浏览器中这一属性显示为工具提示。