爬虫基础之Web网页基础

server/2024/12/27 18:13:57/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

网页的组成

网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人,那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤,这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。

  • HTML
    HTML(Hypertext Markup Language)中文翻译为超文本标记语言,但我们通常不会用中文翻译来称呼它,一般就叫 HTML。
    HTML是一种用来描述网页的语言。网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是 HTML。网页通过不同类型的标签来表示不同类型的元素,如用 img标签表示图片、用video 标签表示视频、用p标签表示段落,这些标签之间的布局常由布局标签 div 嵌套组合而成,各种标签通过不同的排列和嵌套形成最终的网页框架。那 HTML长什么样子呢?我们可以随意打开一个网站,比如淘宝网首页,然后单击鼠标右键选择“检查元素”菜单或者按 F12,即可打开浏览器开发者工具,接着切换到 Elements 面板,这时候呈现的就是淘宝网首页对应的 HTML,它包含了一系列标签,浏览器解析这些标签后,便会在网页中将它们渲染成一个个节点,这便形成了我们平常看到的网页。比如在下图中可以看到一个输入框就对应一个 input 标签,可以用于输入文字。
    在这里插入图片描述
    不同标签对应不同的功能,这些标签定义的节点相互嵌套和组合形成了复杂的层次关系,就形成了网页的架构。

  • CSS
    HTML 定义了网页的架构,但是只有 HTML 的页面布局并不美观,有可能只是节点元素的简单排列。为了让网页更好看一些,可以借助 CSS 来实现。
    CSS,全称叫作 Cascading Style Sheets,即层叠样式表。“层叠”是指当 HTML, 中引用了多个样式文件,并且样式发生冲突时,浏览器能够按照层叠顺序处理这些样式。“样式”指的是网页中的文字大小、颜色、元素间距、排列等格式。CSS 是目前唯一的网页页面排版样式标准,有了它的帮助页面才会变得更为美观。
    在上图中,Styles 面板呈现的就是一系列CSS样式,我们摘抄一段:

    #head wrapper.s-ps-islite .s-p-top{
    position:absolute;
    bottom:40px;
    width: 100%;
    height: 181px;
    }
    

    这就是一个 CSS 样式。大括号前面是一个 CSS 选择器,此选择器的意思是首先选中 id 为head wrapper 且class为 s-ps-islite 的节点,然后选中此节点内部的 class为s-p-top 的节点。大括号的内部就是一条条样式规则,position指定了这个节点的布局方式为绝对布局,bottom指定节点的下边距为 40 像素,width 指定了宽度为 100%,表示占满父节点,height 则指定了节点的高度。也就是说,我们将位置、宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头加上 CSS选择器,这就代表这个样式对 CSS选择器选中的节点生效,节点就会根据此样式来展示了在网页中,一般会统一定义整个网页的样式规则,并写人 CSS 文件中(其后缀为 css )。在 HTML只需要用 link 标签即可引人写好的 CSS 文件,这样整个页面就会变得美观、优雅。

  • JavaScript
    JavaScript简称JS,是一种脚本语言。HTML和 CSS 组合使用,提供给用户的只是一种静态信息缺乏交互性。我们在网页里还可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等。这通常就是 JavaScript 的功劳。JavaScript 的出现使得用户与信息之间不只是一种浏览与显示的关系
    还实现了一种实时、动态、交互的页面功能。
    JavaScript通常也是以单独的文件形式加载的,后缀为is,在 HTML中通过 script 标签即可引人.例如:

    <script src="jquery-2.1.0.js"></script>
    

综上所述,HTML 定义了网页的内容和结构,CSS 描述了网页的样式,JavaScript 定义了网页的行为。

网页的结构

我们首先用例子来感受一下 HTML的基本结构。新建一个文本文件,名称叫作 test.html,内容如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>This is a Demo</title>
</head>
<body><div id="container"><div class="wrapper"><h2 class="title">Hello World</h2><p class="text">Hello,this is a paragraph.</p></div></div>
</body>
</html>

这就是一个最简单的 HTML 实例。开头用 DOCTYPE 定义了文档类型,其次最外层是 htm1 标签,代码最后有对应的结束标签表示闭合。html标签内部是 head 标签和 body 标签,分别代表网页头和网页体,它们同样需要结束标签。head 标签内定义了一些对页面的配置和引用,上述代码中的<metacharset=“UTF-8”>指定了网页的编码为 UTF-8。
title 标签则定义了网页的标题,标题会显示在网页的选项卡中,不会显示在正文中。body 标签内的内容是要在网页正文中显示的。div标签定义了网页中的区块,此处区块的id是container,id是一个非常常用的属性,其内容在网页中是唯一的,通过它可以获取这个区块。然后在此区块内又有一个 div标签,它的 class 为wrapper,这也是一个非常常用的属性,经常与 CSS 配合使用来设定样式。然后此区块内部又有一个 h2 标签,代表一个二级标题;另外还有一个p标签,代表一个段落。若想在网页中呈现某些内容,直接把内容写人h2标签和p标签中间即可,这两者也有各自的 class 属性。将代码保存后,双击该文件在浏览器中打开,可以看到如下图所示的内容。
在这里插入图片描述
可以看到,选项卡上显示 ThisisaDemo 字样,这是我们在 head 标签中的 title 里定义的文字。网页正文则是由 body 标签内部定义的各个元素生成的,可以看到这里显示了二级标题和段落。

这个实例便是网页的一般结构。一个网页的标准形式是 html 标签内嵌套 head 标签和 body 标签head 标签内定义网页的配置和引用,body 标签内定义网页的正文。

节点树及节点间的关系

在 HTML中,所有标签定义的内容都是节点,这些节点构成一个HTML,节点树,也叫HTMLDOM树先来看一下什么是 DOM。DOM 是 W3C(万维网联盟)的标准,英文全称是 Document ObjectModel,即文档对象模型。它定义了访问 HTML和XML,文档的标准。根据 W3C的HTMLDOM 标准HTML 文档中的所有内容都是节点。

  • 整个网站文档是一个文档节点。
  • 每个 htm1 标签对应一个根节点,即上例中的 html标签,它属于一个根节点。
  • 节点内的文本是文本节点,比如a节点代表一个超链接,它内部的文本也被认为是一个文本节点。
  • 每个节点的属性是属性节点,比如a节点有一个 href 属性,它就是一个属性节点。
  • 注释是注释节点,在 HTML,中有特殊的语法会被解析为注释,它也会对应一个节点。
    因此,HTMLDOM 将 HTML文档视作树结构,这种结构被称为节点树,如下图所示。
    在这里插入图片描述
    通过 HTML DOM,节点树中的所有节点均可通过 JavaScript访问,所有 HTML节点元素均可被修改、创建或删除。
    节点树中的节点彼此拥有层级关系。我们常用父(parent)、子(child)和兄弟(sibling)等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。
    在节点树中,顶端节点称为根(root)。除了根节点之外,每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点。下图展示了节点树以及树中节点间的关系。
    在这里插入图片描述

选择器

我们知道,网页由一个个节点组成,CSS选择器会为不同的节点设置不同的样式规则,那么怎样定位节点呢?
在 CSS 中,使用 CSS 选择器来定位节点。例如,“网页的结构”一节的例子中 div 节点的 id container,那么这个节点就可以表示为 #container,其中以#开头代表选择 id,其后紧跟的是 id 的名称。如果想选择 class为wrapper的节点,则可以使用.wrapper,这里以.开头代表选择class,其后紧跟的是 class的名称。除了这两种,还有一种选择方式,就是根据标签名,例如想选择二级标题直接用 h2 即可。这些是最常用的三种方式,分别是根据 id、class、标签名选择,请牢记它们的写法。另外,CSS 选择器还支持嵌套选择,利用空格把各个选择器分隔开便可以代表嵌套关系,如#container .wrapper p代表先选择 id为 container 的节点,然后选择其内部 class 为 wrapper 的节点,再进一步选择该节点内部的p节点。要是各个选择器之间不加空格,则代表并列关系,如div#container .wrapper p.text 代表先选择 id 为 container 的 div 节点,然后选择其内部 class 为wrapper 的节点,再进一步选择这个节点内部的 class 为 text的p节点。这就是 CSS 选择器,其筛选功能还是非常强大的。我们可以在浏览器中测试 CSS 选择器的效果,依然还是打开浏览器的开发者工具,然后按快捷键Ctrl+F(如果你用的是Mac,则是 Command+F),这时候左下角便会出现一个搜索框,如下图所示:
在这里插入图片描述

这时候我们输人 .title 就是选中了 class为title的节点,该节点会被选中并在网页中高亮显示如下图所示。
在这里插入图片描述
输入 div#container .wrapper p.text 就逐层选中了id为container 的节点中 class 为 wrapper 的节点中的p节点,如下图所示。
在这里插入图片描述
CSS选择器还有一些其它语法规则,具体如下表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外,还有一种比较常用的选择器 XPath,这种选择方式后面会详细介绍。

总结

本节介绍了网页的结构和节点间的关系,了解了这些内容,我们才能有更加清晰的思路去解析和提取网页内容。


http://www.ppmy.cn/server/149838.html

相关文章

牛客网刷题 | BC126 小乐乐查找数字

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;从0至1-CSDN博客&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;C语言、C、数据结构、嵌入式、Linux&#x1f36d; &#x1f60e;本文内容&#x1f923;&#xff1a;&#x1f36d;BC1…

【答疑】spiderflow中使用正则表达式和自定义函数@20241209

前言 spiderflow入门及实践这篇文章有网友评论说如何使用正则表达式提取文本以及如何使用自定义函数来实现需要的功能&#xff0c;本文单独开一篇文章来解答这部分问题&#xff0c;希望能够帮助到这位网友和其他有需要的朋友。 支持的正则表达式 对正则表达式和xpath语法的支…

基于长短时记忆神经网络的空气质量数据分析与预测的设计与实现

研究内容 本文旨在研究和解决气象参数和气象aqi指数实时预测准确度较低和速度较慢的问题&#xff0c;并结合所有空气质量监测站点以及气象监测站点的实际情况&#xff0c;将长短时记忆神经网络应用于气象基本指数的预测中&#xff0c;为日后的政府决策和人类出行活动提供一定的…

ThinkPHP 5.1 的模板布局功能

ThinkPHP 5.1 的模板布局功能&#xff0c;包括全局配置、模板标签以及动态方法布局三种方式。以下是对这三种方式的要点概括和补充&#xff0c;以便于更好地理解和使用&#xff1a; 方式一&#xff1a;全局配置方式 适用于全站使用相同布局的情况&#xff0c;配置简单且统一。…

静态链表的构建

前言&#xff1a; 静态链表的概述&#xff1a; 静态链表是一种在数组中模拟链表结构的数据结构&#xff0c;它通过数组的索引来模拟指针&#xff0c;实现节点之间的链接&#xff0c;就不需要使用指针了。每个节点由两部分组成&#xff1a;数据域和游标。数据域用于储存数据&a…

PyTorch 的 torch.unbind 函数详解与进阶应用:中英双语

中文版 PyTorch 的 torch.unbind 函数详解与进阶应用 在深度学习中&#xff0c;张量的维度操作是基础又重要的内容。PyTorch 提供了许多方便的工具来完成这些操作&#xff0c;其中之一便是 torch.unbind。与常见的堆叠函数&#xff08;如 torch.stack&#xff09;相辅相成&am…

Docker 常用操作大全:从基础到进阶的全面指南

Docker 是当今 DevOps 和开发环境中最常用的容器化平台之一。它的易用性和功能强大&#xff0c;使得容器技术变得广泛流行&#xff0c;并成为软件开发流程的重要组成部分。为了帮助你掌握 Docker 的操作&#xff0c;本文将详细介绍 Docker 的各种常用操作&#xff0c;帮助你从基…

前后端通讯:前端调用后端接口的五种方式,优劣势和场景

Hi&#xff0c;我是&#xff0c;专注前端开发8年了&#xff0c;前端始终绕不开的一个话题就是如何和后端交换数据&#xff08;通讯&#xff09;&#xff0c;本文先从最基础的通讯方式讲起。 一、什么是前后端通讯 前后端通讯&#xff08;Frontend-Backend Communication&…