【Python从入门到进阶】20、HTML页面结构的介绍

news2024/11/28 22:50:37

接上篇《19、Python异常处理》
上一篇我们学习了Python中有关异常(捕获异常、处理异常等)的知识。从本篇开始,我们进入Python的实战教程,学习爬虫的相关技术,本篇主要讲解要爬取的HTML页面的结构。

一、一个场景

假设一个场景,我们即将使用Python爬虫来抓取京东商城的页面信息,主要是首页左边导航栏的数据,以此来分析京东主要经营哪些品类的商品:

这里我们就要梳理清楚我们的实际需求,我们只是需要首页的左侧导航栏的数据,即这个页面的部分数据,而不是所有数据,我们鼠标点击右键,选择检查:

可以看到整个页面的HTML源码,这里面的信息有太多太多:

而我们只想要里面的商品分类汉字,不需要里面的HTML标签。我们要实现这个目标,就要清晰的知道这个页面间的标签结构。

所以,学习Python爬虫之前,我们要了解我们爬取的目标,即整个HTML文档的结构是什么样的,我们怎么去爬这种结构的文档。

二、HTML页面结构

我们在编辑器新建一个HTML格式的文件:

然后我们可以看到新建好的HTML文件,已经为我们预写好了一些代码:

这里面的代码就是HTML代码,这个结构就是HTML的主体结构,我们下面来介绍一下HTML的主体结构。

最上面是一个<!DOCTYPE html>描述,然后主体代码里,最外面被<html></html>标签包裹,里面包含了两个大模块,分别是<head></head>和<body></body>。他们的含义分别如下:
(1)<!DOCTYPE html>:这一行代码的作用是告诉浏览器该文档使用的是HTML5标准。在HTML5中,该声明已经被简化为一个固定的格式,即 “<!DOCTYPE html>”。
(2)<html>:这个标签表示HTML文档的根元素,它包含了整个HTML文档的内容,从头到尾只有一个。在<html>标签内部应该包含两个子元素:<head>和<body> 。 
(3)<head>:这个标签包含了一些用于描述文档的元数据,比如网页标题,引入CSS样式表等等,这些数据对用户来说是不可见的。
(4)<body>:这个标签包含了网页上显示给用户的所有内容,比如文本、图像、链接等等。可以在<body>标签中插入多个子元素以形成更复杂的页面布局。

除了这些基本的元素,还有许多其他的HTML标记可以用来丰富文档结构,并增强内容的语义和可访问性。

三、HTML一些简单的标签

我们后面使用爬虫抓取HTML页面的时候,主要是针对<body>标签中的一些子元素进行分析,为了便于我们后续学习,我们来了解一下一些爬虫经常需要抓取的<body>标签子元素,以及其概念。

1、表格

可以使用<table>标签来创建表格。表格由行和列组成,每个单元格都可以包含文本或其他元素。
其中<table>标签表示整个表格,<tr>表示表格中的一行,<th>和<td>分别表示表头和单元格。

下面是一个基本的表格示例:

<table>
  <tr>
    <th>姓名</th>
    <th>年龄</th>
    <th>性别</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>25</td>
    <td>男</td>
  </tr>
  <tr>
    <td>李四</td>
    <td>30</td>
    <td>女</td>
  </tr>
</table>

效果:

还可以通过给<table>增加一个控制边框宽度的属性,给它加个1像素,solid格式,#ddd颜色的表格边框:

<table border="1px solid #ddd">

效果:

通过在表格中嵌套多个行和列元素,我们可以创建更复杂的表格设计。同时,我们也可以通过CSS来对表格进行样式化。

2、无序列表和有序列表

<ul>和<ol>是HTML中常用的列表标签,它们可以用来创建无序列表和有序列表。

(1)<ul>

<ul>标签表示无序列表,通常会对列表项目添加一个圆点符号或其他的符号来表示每个列表项。例如:

<ul>
  <li>苹果</li>
  <li>香蕉</li>
  <li>橙子</li>
</ul>

效果:

在这个例子中,<ul>标签表示整个无序列表,每个<li>标签表示一个列表项。浏览器将自动在每个列表项前添加圆点符号。

<li>标签本身不会产生任何可见的效果,但是它是列表中的关键元素。列表项中可以包含任何其他HTML元素,例如图像、链接等等。

(2)<ol>
除了无序列表,我们还可以使用<ol>标签来创建有序列表。与无序列表类似,有序列表也由多个列表项组成,不同之处在于浏览器将自动为每个列表项添加数字或字母编号。例如:

<ol>
  <li>第一步</li>
  <li>第二步</li>
  <li>第三步</li>
</ol>

效果:

在这个例子中,<ol>标签表示整个有序列表,每个<li>标签表示一个列表项。浏览器将自动为每个列表项添加数字编号。

总之,<ul>和<ol>标签是HTML中非常实用的标记,可用于创建各种类型的列表。它们使得在文档中展示信息更加清晰、易读和易于理解。这两个列表标记,在爬虫使用的场景中非常多。

3、超链接

<a>标签是HTML中常用的链接标签,它可以用来创建指向其他页面、文档、位置或任何其他URL的超链接。

下面是一个基本的<a>标签的示例:

<a href="http://www.baidu.com">点击这里访问百度网站</a>

效果:

在这个示例中,<a>标签定义了一个超链接,并使用href属性指定了要链接到的URL。用户点击该链接时,浏览器将会打开指定的URL。

总之,<a>标签是HTML中非常实用的标签,它提供了一种链接到其他内容和页面的方法,使得Web页面更加富有交互性和可访问性。
在我们爬虫的时候,会经常遇到<a>标签,有时候我们还需要去分析<a>标签指向的下一个地址,便于我们更深一步的爬取下一层的页面。

4、容器

<div>标签是HTML中常用的容器标签,它可以用来将HTML文档中的一组元素组合在一起,并为这些元素提供一个共同的父级元素。

<div>元素本身不会产生任何可见的效果,但是它可以被用来创建网页布局、调整样式和分组相关元素。对于CSS和JavaScript开发人员,<div>标签也是非常有用的,因为它允许它们轻松地选择和操作页面上的多个元素。

以下是一个<div>标签的示例:

<div class="container">
  <h1>欢迎来到我的网站!</h1>
  <p>这里是我的个人博客,我将分享我的经验和知识。</p>
</div>

效果:

在这个示例中,<div>标签用作一个容器元素,包含了标题和段落两个子元素。我们还使用了class属性来为该<div>标签添加一个类名,使得我们可以轻松地对它应用样式。

除此之外,<div>标签还可以与其他HTML元素一起使用,以创建更复杂的网页结构。例如,我们可以将一个表单元素放置在<div>容器中,然后使用CSS来设计表单的外观和交互性。

总之,<div>标签是HTML中非常实用的标签,它提供了一种简单而有效的方法来组合和控制HTML元素,并让我们更好地管理Web页面的结构和样式。

四、回顾场景

我们回顾一下刚刚那个京东的界面,我们将导航栏那部分的代码选中,可以看到里面存在大量的容器、列表及超链接标签:

我们后面学习爬虫技术后,就可以根据结构进行分析,并过滤抓取到我们需要的目标内容。

关于HTML页面结构的基本介绍就到这里了,下一篇我们来正式介绍爬虫的基本概念。

参考:尚硅谷Python爬虫教程小白零基础速通教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/130790505

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Godot引擎 4.0 文档 - 入门介绍 - Godot 编辑器

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; First look at Godots editor — Godot Engine (stable) documentation in English Godot的编辑器 本页将为您简要介绍 Godot 的界面。我们将查看不同的主屏幕和停靠栏…

C语言:字符函数和字符串函数详解及部分函数的模拟实现(前篇)

文章目录 求字符串长度strlenstrlen函数的模拟实现: 长度不受限制的字符串函数strcpystrcatstrcmp总结 长度受限制的字符串函数介绍strncpystrncatstrncmp 前言&#xff1a; C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串…

【LeetCode】382. 链表随机节点

382. 链表随机节点&#xff08;中等&#xff09; 方法一 思路 定义两个链表&#xff0c;一个origin&#xff0c;用于每次调用 getRandom() 时进行初始化&#xff0c;一个 l 用于每次调用 getRandom() 时进行遍历&#xff0c;找到随机选定的元素。首先在 Solution() 的时候&am…

SpringBoot原理——起步依赖与自动装配

文章目录 SpringBoot原理一、起步依赖二、自动配置2.1 概述2.2 工具类准备工作2.2.2 HeaderConfig2.2.3 HeaderGenerator2.2.4 HeaderParser2.2.5 MyImportSelector2.2.6 TokenParser2.2.7 pom.xml文件 2.3 自动配置原理2.3.1 引入工具类2.3.2 案例 &#xff1a; 访问第三方Bea…

GPT专业应用:撰写工作简报

●图片由Lexica 生成&#xff0c;输入&#xff1a;Workers working overtime 工作简报&#xff0c;作为一种了解情况、沟通信息的有效手段&#xff0c;能使上级机关和领导及时了解、掌握所属部门的政治学习、军事训练、行政管理等方面的最新情况&#xff1b;同时&#xff0c;能…

BERT输入以及权重矩阵形状解析

以下用形状来描述矩阵。对于向量&#xff0c;为了方便理解&#xff0c;也写成了类似(1,64)这种形状的表示形式&#xff0c;这个你理解为64维的向量即可。下面讲的矩阵相乘都是默认的叉乘。 词嵌入矩阵形状&#xff1a;以BERT_BASE为例&#xff0c;我们知道其有12层Encoder&…

记录--Vue中如何导出excel表格

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一、导出静态数据 1、安装 vue-json-excel npm i vue-json-excel注意&#xff0c;此插件对node有版本要求&#xff0c;安装失败检查一下报错是否由于node版本造成&#xff01; 2、引入并注册组件(以全…

【CSS语法应用在Qt中的QSS和文本】第一天

CSS语法应用在Qt中的QSS和文本 【1】CSS语法【1】QSS使用以上CSS语法【1.1】QTextBrowser设置样式表【1.2】QTextBrowser使用CSS语法设置文本样式 【1】CSS语法 &#x1f49b;&#x1f49b;&#x1f49b;&#x1f49b;&#x1f49b;&#x1f49b;&#x1f49b;&#x1f49b;&am…

Redis的五大类型

一、String数据类型 概述&#xff1a;String是redis最基本的类型&#xff0c;最大能存储512MB的数据&#xff0c;String类型是二进制安全的&#xff0c;即可以存储任何数据、比如数字、图片、序列化对象等 1. SET/GET/APPEND/STRLEN: append命令&#xff1a;append key valu…

【mysql】explain执行计划之id列

目录 一、说明二、示例2.1 id相同&#xff0c;执行顺序从上到下2.2 id不相同&#xff0c;id值越大越先执行2.3 既有id相同也有id不同的情况&#xff0c;先执行序号大的&#xff0c;再同级从上往下执行2.4 id列显示为null的最后执行。表示结果集&#xff0c;不需要使用它来进行查…

记录一次windows mysql5.7安装失败的过程

首先下载mysql安装包 windows版本 https://dev.mysql.com/downloads/installer/ 接着 在执行安装mysql msi安装包最后一步的时候&#xff0c;显示 Failed to start service MySQL57. 只有在任务处于完成状态(RanToCompletion、Fau 这时候 检查要么windows下面mysql的卸载残留没…

AUTOSAR-文档命名说明

文章目录 AUTOSAR_TR_PredefinedNamesAutosar验收测试基本说明 AUTOSAR_TR_PredefinedNames AUTOSAR_TR_PredefinedNames&#xff08;Predefined Names in AUTOSAR&#xff09;.pdf对基础软件标准规范文档的分类信息做出了介绍&#xff0c;其中常用的文档包括EXP、PRS、RS、SR…

【C++】类和对象(中)---取地址及const取地址操作符重载、const成员函数的使用

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

缓存穿透的解决办法有哪些?

一、概述 缓存穿透是指查询一个不存在的数据&#xff0c;由于缓存和数据库都没有命中&#xff0c;导致每次请求都需要从数据库中读取数据&#xff0c;增加了数据库的负担。解决缓存穿透的方法有以下几种&#xff1a; 布隆过滤器(Bloom Filter):使用位数组来表示一个集合&#…

iptables防火墙概念

iptables防火墙 一、iptables概述1.netfilter 与 iptables 的关系1&#xff09;netfilter2&#xff09;iptables 2.四表五链1&#xff09;四表2&#xff09;五链3&#xff09;表的匹配优先级4&#xff09;规则链之间的匹配顺序5&#xff09;规则链内的匹配顺序 二、iptables防火…

国外大神用 ChatGPT 成功打造一个「虚拟空间传送」系统!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 相信大家小时候躺在床上&#xff0c;都曾设想过这么一个场景&#xff1a; 当你闭上眼睛时&#xff0c;感觉身心十分安宁&#xff0c;物理世界慢慢淡出&#xff0c;身体也随着变得飘逸&…

【mysql】explain执行计划之select_type列

目录 一、说明二、示例2.1 simple&#xff1a;简单表&#xff0c;不使用union或者子查询2.2 primary&#xff1a;主查询&#xff0c;外层的查询2.3 subquery&#xff1a;select、where之后包含了子查询&#xff0c;在select语句中出现的子查询语句&#xff0c;结果不依赖于外部…

5.21下周黄金走势分析及开盘独家交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(5月19日)美市尾盘&#xff0c;现货黄金收报1977.54美元/盎司&#xff0c;大幅上升19.99美元或1.02%&#xff0c;日内最高触及1984.22美元/盎司&#xff0c;最低…

【LeetCode: 10. 正则表达式匹配 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【工程化】记录在react工程中eslint、prettier等formatter以及git提交等规范的知识点

文章目录 前言创建eslint安装prettier安装.eslintrc.js完善独立的vscode设置到这一步要重启vscodehuskycommit-lint一切准备就绪&#xff0c;开干&#xff01; 前言 由于使用ACR的方式创建react工程时&#xff0c;并不会像vue一样有每一步的安装提示&#xff0c;需要我们在创建…