浅学爬虫-HTML和CSS结构

HTML结构

HTML(HyperText Markup Language)是构建网页的基础语言。它通过标签(Tags)来定义网页的结构和内容。HTML文档的基本结构如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>这是标题</h1><p>这是一个段落。</p><a href="http://example.com">这是一个链接</a></body>
</html>

基本标签介绍:

  • <!DOCTYPE html>: 声明文档类型,告诉浏览器这是一个HTML5文档。
  • <html>: HTML文档的根元素,表示整个HTML文档。
  • <head>: 包含页面的元数据,如编码、标题、样式等。
  • <meta charset="UTF-8">: 声明文档的字符编码为UTF-8。
  • <title>: 设置网页的标题,显示在浏览器标签页上。
  • <body>: 包含网页的可见内容。
  • <h1>: 一级标题,用于定义重要的标题。
  • <p>: 段落,用于定义文本段落。
  • <a>: 超链接,用于创建链接。

其他常用标签:

  • <h1> - <h6>: 标题标签,<h1>表示最高级别的标题,<h6>表示最低级别的标题。
  • <div>: 区块元素,用于定义文档中的分区或节。
  • <span>: 内联元素,用于对文档中的一部分文本进行分组。
  • <ul>: 无序列表,用于定义项目符号列表。
  • <ol>: 有序列表,用于定义编号列表。
  • <li>: 列表项,用于定义列表中的项。
  • <img>: 图像标签,用于嵌入图像。
  • <table>: 表格标签,用于创建表格结构。
CSS选择器

CSS(Cascading Style Sheets)用于控制HTML文档的样式。选择器是CSS中用于选取元素的模式。常见的CSS选择器包括:

  • 标签选择器: 选取指定标签的所有元素。
p {color: blue;
}
  • 类选择器: 选取具有指定类属性的所有元素,类名以.开头。
.example {font-size: 16px;
}
  • ID选择器: 选取具有指定ID属性的元素,ID名以#开头。
#header {background-color: gray;
}
  • 属性选择器: 选取具有指定属性的元素。
[type="text"] {border: 1px solid black;
}
  • 后代选择器: 选取某元素内的所有指定子元素。
div p {color: red;
}

其他常用选择器:

  • 群组选择器: 选取所有符合选择器的元素。
h1, h2, h3 {font-family: Arial, sans-serif;
}
  • 子元素选择器: 选取作为某元素直接子元素的所有指定元素。
ul > li {list-style-type: square;
}
  • 伪类选择器: 选取处于特定状态的元素。
a:hover {color: green;
}
  • 伪元素选择器: 选取元素的某部分内容。
p::first-line {font-weight: bold;
}
使用BeautifulSoup解析HTML

BeautifulSoup是一个用于解析HTML和XML文档的Python库。我们可以使用BeautifulSoup轻松地从网页中提取数据。

步骤1:安装BeautifulSoup

pip install beautifulsoup4

步骤2:编写解析HTML的代码

from bs4 import BeautifulSoup# 示例HTML
html_doc = """
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Example Page</title>
</head>
<body><h1>Example Header</h1><p class="description">This is a description paragraph.</p><a href="http://example.com" id="example-link">Example Link</a>
</body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 提取标题
title = soup.title.string
print(f"页面标题: {title}")# 提取一级标题
header = soup.h1.string
print(f"一级标题: {header}")# 提取段落内容
description = soup.find('p', class_='description').string
print(f"段落描述: {description}")# 提取链接
link = soup.find('a', id='example-link')['href']
print(f"链接地址: {link}")

代码解释:

  1. 创建BeautifulSoup对象: 使用BeautifulSoup解析HTML文档。
soup = BeautifulSoup(html_doc, 'html.parser')
  1. 提取标题: 使用soup.title.string提取文档的标题。
title = soup.title.string
print(f"页面标题: {title}")
  1. 提取一级标题: 使用soup.h1.string提取一级标题内容。
header = soup.h1.string
print(f"一级标题: {header}")
  1. 提取段落内容: 使用soup.find方法结合标签名和类名提取段落内容。
description = soup.find('p', class_='description').string
print(f"段落描述: {description}")
  1. 提取链接: 使用soup.find方法结合标签名和ID提取链接地址。
link = soup.find('a', id='example-link')['href']
print(f"链接地址: {link}")
BeautifulSoup常用方法
  • find(): 返回第一个符合条件的元素。
soup.find('a')
  • find_all(): 返回所有符合条件的元素列表。
soup.find_all('a')
  • select(): 使用CSS选择器选取元素。
soup.select('a[href]')
  • get_text(): 获取元素的文本内容。
soup.get_text()
示例解析复杂HTML

假设我们有一个更复杂的HTML文档:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Sample Page</title></head><body><div id="content"><h1>Sample Header</h1><p class="description">This is a sample description.</p><div class="links"><a href="http://example1.com" class="external">Link 1</a><a href="http://example2.com" class="external">Link 2</a></div></div></body>
</html>

我们可以编写以下代码来解析这个文档:

from bs4 import BeautifulSoup# 示例HTML
html_doc = """
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Sample Page</title>
</head>
<body><div id="content"><h1>Sample Header</h1><p class="description">This is a sample description.</p><div class="links"><a href="http://example1.com" class="external">Link 1</a><a href="http://example2.com" class="external">Link 2</a></div></div>
</body>
</html>
"""# 创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, 'html.parser')# 提取标题
title = soup.title.string
print(f"页面标题: {title}")# 提取一级标题
header = soup.find('h1').string
print(f"一级标题: {header}")# 提取段落内容
description = soup.find('p', class_='description').string
print(f"段落描述: {description}")# 提取所有链接
links = soup.find_all('a', class_='external')
for link in links:href = link['href']text = link.stringprint(f"链接文本: {text}, 链接地址: {href}")

代码解释:

  1. 提取所有链接: 使用soup.find_all('a', class_='external')提取所有带有class="external"的链接。
  2. 遍历链接: 遍历提取到的链接,获取链接文本和地址。
结论

本文详细介绍了HTML的基本结构和常见标签,解释了CSS选择器的作用和使用方法,并通过示例展示了如何使用BeautifulSoup解析HTML并提取数据。这些基础知识将帮助初学者理解和编写爬虫。在下一篇文章中,我们将进一步探讨处理复杂网页的方法。

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

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

相关文章

PHP反序列化漏洞从入门到深入8k图文介绍,以及phar伪协议的利用

文章参考&#xff1a;w肝了两天&#xff01;PHP反序列化漏洞从入门到深入8k图文介绍&#xff0c;以及phar伪协议的利用 前言 本文内容主要分为三个部分&#xff1a;原理详解、漏洞练习和防御方法。这是一篇针对PHP反序列化入门者的手把手教学文章&#xff0c;特别适合刚接触PH…

Linux用户-用户组管理

文章目录 14. Linux 用户 - 用户组管理14.1 用户-用户组概述14.2 查看用户登录14.3 用户和用户组配置文件概述14.4 用户账号配置文件信息14.5 用户账号管理14.6 用户密码管理14.7 用户密码配置文件14.8 用户删除14.9 用户组管理14.10 用户组文件信息14.11 用户深入管理 14. Lin…

Windows搭建我的世界MC服务器 【Minecraft外网联机教程】

目录 ⛳️推荐 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 1.3 创建我的世界服务器 2. 局域网联机测试 3. 安装cpolar内网穿透 4. 公网联机Minecraft 5. 配置固定远程联机端口地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通…

新手转行AI运营岗位,轻松实现月入15K+

近年来人工智能大爆发&#xff0c;各种AI产品层出不穷&#xff0c;市场也出现了一批高薪AI运营类岗位 不需要技术背景、门槛低&#xff0c;即便是新手&#xff0c;也有机会拿下offer。如果你计划今年跳槽或转行运营&#xff0c;这5个岗位不妨试试&#xff08;结尾附国内AI公司清…

科普文:万字梳理高性能 Kafka快的8个原因

概叙 科普文&#xff1a;万字详解Kafka基本原理和应用-CSDN博客 科普文&#xff1a;万字梳理31个Kafka问题-CSDN博客 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。 在座的…

【深度学习】kaggle使用

https://blog.csdn.net/2301_78630677/article/details/133834096 https://blog.csdn.net/xiaojia1001/article/details/139467176 https://www.kaggle.com/ 使用要挂代理&#xff0c;要不然可能无法注册 绑定手机号之后才能使用GPU 每周30h免费GPU使用时长 上传数据集 Ad…

安科瑞ACTB系列电流互感器过电压保护器

产品概述&#xff1a; 安科瑞ACTB系列电流互感器过电压保护器是一种重要的电力保护设备&#xff0c;‌主要用于防止电流互感器在运行中因二次绕组开路或一次绕组流过异常电流而在二次侧产生的高压过电压。‌这种保护器能有效防止因电流互感器二次侧异常高压引起的事故&#xf…

手撕数据结构---栈和队列的概念以及实现

栈的概念&#xff1a; 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…

Kafka、RabbitMQ、RocketMQ:消息队列技术深度对比

文章目录 摘要1. 消息队列概述1.1 消息队列的作用 2. Kafka2.1 简介2.2 核心特性2.3 使用场景 3. RabbitMQ3.1 简介3.2 核心特性3.3 使用场景 4. RocketMQ4.1 简介4.2 核心特性4.3 使用场景 5. 技术对比5.1 吞吐量5.2 可靠性5.3 消息延迟5.4 消息顺序 6. 结语 摘要 消息队列是…

《框架》

《框架》 引言 在当今快速发展的技术世界中,框架(Framework)已成为软件开发中不可或缺的一部分。框架为开发者提供了一种结构化的方法来构建应用程序,从而提高开发效率、确保代码质量和维护性。本文将深入探讨框架的概念、类型、优势以及在现代软件开发中的应用。 什么是…

opencascade AIS_RubberBand AIS_RotationMode源码学习

//!相机旋转类型 Camera rotation mode. enum AIS_RotationMode { AIS_RotationMode_BndBoxActive, //!< default OCCT rotation AIS_RotationMode_PickLast, //!< rotate around last picked point AIS_RotationMode_PickCenter, //!< rotate around point at the ce…

广东省道路工程检测练习试题(单选406题)真题

1.一般项目的合格点率应达到( ),且不合格点的最大偏差值不得大于规定允许偏差值的1.5倍。 A.不低于75% B.不低于80% C.不低于85% D.不低于90% 答案:B 2.进行土路基平整度检测时,当路宽小于9m,检测点数应为( ) A.1 B.2 C.3 D.4 答案:A 3.根据《城镇道路工程施工…

python之代码简化式(列表、字典生成式,递归函数,迭代器(iter)和生成器(yield)、匿名函数(lambda)的使用)(12)

文章目录 前言1、列表、字典生成式2、递归函数2.1 python中代码的递归深度&#xff08;扩展&#xff09; 3、拓展&#xff1a;迭代器和生成器3.1 迭代器&#xff08;iter&#xff09;3.2 生成器&#xff08;yield&#xff09; 4、匿名函数&#xff08;lambda&#xff09;4.1 ma…

宠物猫用空气净化器真的有用吗?值得买的猫用空气净化器牌子排名

作为一名6年资深铲屎官&#xff0c;每天铲猫砂盆的工作无疑是一项挑战。家中不仅弥漫着难以忍受的气味&#xff0c;而且家里的小孩和老人偶尔会因为过敏性鼻炎或结膜炎等问题感到不适。换毛季节尤其头疼&#xff0c;浮毛无处不在&#xff1a;沙发、外套、坐垫&#xff0c;甚至连…

C++中绝对值的用法

在C中&#xff0c;std::fabs函数可以用于四则运算中&#xff0c;特别是当你需要确保参与运算的浮点数是正值时。std::fabs函数返回其参数的绝对值&#xff0c;这对于处理可能包含负数的表达式很有用。 下面是一些示例&#xff0c;展示了如何在四则运算中使用std::fabs函数&…

Spring Boot 3 + Resilience4j 简单入门 + Redis Cache 整合

1. 项目结构 2. Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/> <!-- lookup parent from repository --&…

Kubernetes CRI工具集:crictl深度实践与应用

Kubernetes CRI工具集&#xff1a;crictl深度实践与应用 一、引言 在Kubernetes&#xff08;k8s&#xff09;环境中&#xff0c;crictl是一个重要的命令行工具&#xff0c;用于与容器运行时接口&#xff08;Container Runtime Interface, CRI&#xff09;兼容的容器运行时&am…

如何学习ClickHouse:糙快猛的大数据之路(技术要点概览)

这个系列文章用"粗快猛大模型问答讲故事"的创新学习方法&#xff0c;让你轻松理解复杂知识&#xff01;涵盖Hadoop、Spark、MySQL、Flink、Clickhouse、Hive、Presto等大数据所有热门技术栈&#xff0c;每篇万字长文。时间紧&#xff1f;只看开头20%就能有收获&#…

英文润色工具 Quillbot

QuillBot 是一种基于人工智能&#xff08;AI&#xff09;的写作辅助工具&#xff0c;旨在帮助用户改进他们的写作质量和效率。它提供了多种功能&#xff0c;包括但不限于改写、总结、语法检查和词汇增强。以下是对 QuillBot 软件的一些详细介绍&#xff1a; ### 主要功能 1. …

如何智能便捷、自动化地进行文件数据采集?

文件数据采集是指从各种源头和渠道收集、整理、清洗、分析和挖掘数据的过程。它是大数据应用的基础&#xff0c;为企业提供全面的决策支持和业务价值。文件数据采集对于不同行业都至关重要&#xff0c;通过有效的文件数据采集&#xff0c;企业可以更好地了解市场动态、优化服务…