Python HTML解析详解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Python HTML解析详解

HTML解析是任何网络爬虫应用的基础,Python中提供了多个解析HTML的库,包括BeautifulSoup、lxml、html5lib等。这里我们将使用BeautifulSoup来演示如何解析HTML。

安装BeautifulSoup

在安装BeautifulSoup之前,需要先安装一个Python包管理器pip。在终端中输入以下命令安装pip。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py

安装完成pip后,输入以下命令来安装BeautifulSoup。

pip install BeautifulSoup4

解析HTML

我们将使用BeautifulSoup来解析一个简单的HTML文件,其中包含了一个标题和两个链接。我们使用open函数来打开该文件,读取其中的文本。

from bs4 import BeautifulSoup
 
with open('example.html') as f:
    soup = BeautifulSoup(f.read(), 'html.parser')

在这个例子中,使用了open函数来打开名为example.html的文件,并创建了一个BeautifulSoup对象souphtml.parser是一个HTML解析器,它将HTML代码解析成一个树形结构。

读取文件后,我们就可以使用BeautifulSoup的各种方法来遍历和查询HTML文档了。

遍历HTML树形结构

我们可以使用soup对象中的children来获取HTML文档中的所有顶级标签。每个标签都是一个Tag类型的对象,包含了标签名、属性和子节点等信息。

for child in soup.children:
    print(child)

输出:

<html>
<head>
<title>Example</title>
</head>
<body>
<a href="https://www.google.com">Google</a>
<a href="https://www.bing.com">Bing</a>
</body>
</html>

我们也可以使用soup对象中的descendants来遍历HTML文档中的所有标签,包括嵌套的标签。

for tag in soup.descendants:
    print(tag)

输出:

<html>
<head>
<title>Example</title>
</head>
<body>
<a href="https://www.google.com">Google</a>
Google
<a href="https://www.bing.com">Bing</a>
Bing
</body>
</html>

查询HTML文档

我们可以使用soup对象中的各种方法来查询HTML文档中的标签和内容。

1.查询标签

使用soup.find_all方法来查询一个HTML文档中所有的标签,该方法返回一个列表。

links = soup.find_all('a')
print(links)

输出:

[<a href="https://www.google.com">Google</a>, <a href="https://www.bing.com">Bing</a>]

2.查询属性

如果我们只想查询标签中的某一个属性,可以使用tag.get方法来获取该属性的值。

for link in links:
    url = link.get('href')
    print(url)

输出:

https://www.google.com
https://www.bing.com

3.查询文本

使用tag.string可以获取一个标签中的文本内容。

for link in links:
    text = link.string
    print(text)

输出:

Google
Bing

修改HTML文档

如果我们需要修改HTML文档中的内容,可以直接修改Tag对象的属性或文本内容。例如:

link = soup.find('a')
link['href'] = 'https://www.yahoo.com'
link.string = 'Yahoo'

该代码将第一个链接的href属性修改为https://www.yahoo.com,并将链接文本修改为Yahoo

修改完成后,我们可以使用soup对象的prettify方法将修改后的HTML文档格式化输出。该方法将自动缩进和换行,使HTML文档更易于阅读。

html = soup.prettify('utf-8')
with open('modified.html', 'wb') as f:
    f.write(html)

使用以上代码,我们可以将修改后的HTML文档保存


相关文章
|
16天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
14天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
71 5
|
27天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
1月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
51 7
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
27天前
|
机器学习/深度学习 前端开发 数据处理
利用Python将Excel快速转换成HTML
本文介绍如何使用Python将Excel文件快速转换成HTML格式,以便在网页上展示或进行进一步的数据处理。通过pandas库,你可以轻松读取Excel文件并将其转换为HTML表格,最后保存为HTML文件。文中提供了详细的代码示例和注意事项,帮助你顺利完成这一任务。
39 0
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
86 2
|
3月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
87 0
|
9天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
9天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多