掌握Python的X篇_30_使用python解析网页HTML
本篇将会介绍beutifulsoup4模块,可以用于网络爬虫、解析HTML和XML,对于没有接触过前端,不了解HTML是如何工作的,需要先解释一下什么事HTML。
1. HTML
网页中的各种布局等的背后都是非常简单的纯文本格式,那种格式称为HTML。
关于HTML不用刻意的去学习,所谓的HTML就是一堆<>括起来的符合或单词,不同的单词就是标签,其对应了不同的作用。
如果在网络上进行通信,获取网页,实际上不会得到我们打开的网页的界面,得到的就是html的代码,而我们关心的可能就是HTML中的一部内容,就需要对HTTML也就是字符串进行解析,找出我们需要的部分。通过python的字符串来进行处理也是可行的,但是考虑到处理的效率,也有相应的开发的模块。
2. 安装bs4
pip install beutifulsoup4
官网文档(中文版):
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
3. 使用BeautifulSoup解析HTML实例
使用的HTML代码如下:来自于官方文档中的范例:a、p均为标签
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p><p class="story">...</p>
"""
将其拷贝到一个txt文件,改后缀为html,利用浏览器打开就是一个网页如下:

- bs4中提供了BeautifulSoup的方法,它可以将html字符串,转化为一个soup对象。
- soup对象中提供了各种属性方法,对应了htm文档,使得我们可以很方便地提取相关信息
以下演示如何进行安装、导入模块、进行HTML的缩进美化
C:\Users\>pip install beautifulsoup4
C:\Users\>ipython
In [1]: from bs4 import BeautifulSoup
In [2]: html_doc = """...: <html><head><title>The Dormouse's story</title></head>...: <body>...: <p class="title"><b>The Dormouse's story</b></p>...:...: <p class="story">Once upon a time there were three little sisters; and their names were...: <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,...: <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and...: <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;...: and they lived at the bottom of a well.</p>...:...: <p class="story">...</p>...: """In [3]: soup = BeautifulSoup(html_doc, 'html.parser') #转变为soup对象In [4]: print(soup.prettify()) #把原有HTML源码进行缩进美化
<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>and<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p><p class="story">...</p></body>
</html>
构造得到的soup对象中提供了各种操作的方法。
find_all:找到所有的标签,返回一个list,list中的每个元素,是标签对象。
In [5]: soup.find_all("a")
Out[5]:
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]In [6]: for i in soup.find_all("a"):...: print(i)...:
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>In [7]: mylist = soup.find_all("a")In [8]: tag0 = mylist[0]In [9]: tag0
Out[9]: <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>In [10]: tag0['href'] #标签类似dict的封装,得到href的value
Out[10]: 'http://example.com/elsie'
In [11]: for item in mylist:...: print(item["href"])...:
http://example.com/elsie
http://example.com/lacie
http://example.com/tillie
4.学习视频地址:使用python解析网页HTML
相关文章:
掌握Python的X篇_30_使用python解析网页HTML
本篇将会介绍beutifulsoup4模块,可以用于网络爬虫、解析HTML和XML,对于没有接触过前端,不了解HTML是如何工作的,需要先解释一下什么事HTML。 1. HTML 网页中的各种布局等的背后都是非常简单的纯文本格式,那种格式称为…...
广联达OA前台sql注入+后台文件上传漏洞复现分析
文章目录 前言资产特征前台sql注入后台文件上传解决办法 前言 最近看到广联达OA的前端sql注入和后端文件上传漏洞联动的poc 广联达科技股份有限公司以建设工程领域专业应用为核心基础支撑,提供一百余款基于“端云大数据”产品/服务,提供产业大数据、产业…...
No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧
情景再现 开发这么久,不知道你们是否也经历过这样的情况,测试或者用户,反馈app闪退,结果你自己打开开发工具,去调试,一切正常,然后闪退还是存在,只是在开发环境中不能重现。这种情况…...
腾讯云CVM服务器竞价实例是什么?和按量计费有什么区别?
腾讯云服务器CVM计费模式分为包年包月、按量计费和竞价实例,什么是竞价实例?竞价实例和按量付费相类似,优势是价格更划算,缺点是云服务器实例有被自动释放风险,腾讯云服务器网来详细说下什么是竞价实例?以及…...
Kali Linux助您网络安全攻防实战
Kali Linux:黑客与防御者的神器 Kali Linux是一款专为网络安全测试和攻防实践而设计的操作系统。它汇集了大量的安全工具,可以用于渗透测试、漏洞扫描、密码破解等任务,不仅为黑客提供了强大的攻击能力,也为安全防御者提供了测试和…...
JavaEE初阶:多线程 - 编程
1.认识线程 我们在之前认识了什么是多进程,今天我们来了解线程。 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码. 引入进程这个概念,主要是为了解决并发编程这样的…...
一种多策略下RabbitMQ的延时队列实现
1.为什么会用到延时队列? 场景: 最近在开发一款系统中遇到这样一个场景,A系统开通套餐需要把套餐信息以邮件的形式发送给相关工作人员,经过人工审核通过后,在B系统里面开通,A系统会调B系统套餐列表接口查询套餐是否开通成功,开通成功则从A系统去完成订单,假如超过设定时间未开…...
解密 AI 客服;在不同硬件设备上运行大型语言模型的可能性
🦉 AI新闻 🚀 微软必应首席执行官称必应聊天优于OpenAI的GPT-4,但成本更高 摘要:微软必应的首席执行官米哈伊尔・帕拉欣表示,必应聊天表现优于OpenAI的GPT-4,但使用了更高成本的检索增强推理技术。必应聊…...
问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题
问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题 场景复现 1 new String() 2 快捷方式生成变量 final修饰的 final String s new String();步骤一:确保settings配置信息 settings-----》Editor------》Code Style--------》java下的这两个选项不…...
SpringBoot基于Zookeeper实现分布式锁
文章目录 问题背景前言实现搭建Zookeeper容器引入依赖ZK客户端的配置类ZK客户端的工厂类注入bean构建测试类 问题背景 研究分布式锁,基于ZK实现,需要整合到SpringBoot使用 前言 参考自SpringBoot集成Curator实现Zookeeper基本操作,Zookeeper入…...
AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)
说一下功能:客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信,从此老死不相往来 看代码: //发送端…...
九耶丨阁瑞钛伦特-请说说你在工作中的PRD文档是如何撰写的?
1、背景说明(解释清楚为什么要做这样一件事,以及做这件事的价值,先把观点拉齐,才方便接下来的工作开展) 简要介绍与项目相关的背景信息、项目要满足的用户需求、开展项目的主要原因、项目期望上线时间、项目涉及的具体…...
Android免打包多渠道统计如何实现
摘要: 实际上只要完成1-2步即可实现多渠道打包,这也意味着,只要每次更新App时给出一个原始包,运营人员就能在后台自己进行操作管理,简单快捷到全程无需开发人员参与。 我们都知道,Android 市场被分割成几十…...
Apipost CICD怎么配置?
配置CI/CD Apipost自动化测试新增CI/CD,配置运行环境、循环次数、间隔停顿后点击保存会生成命令,在安装Apipost的服务器中输入命令即可运行测试脚本。 自动化测试 创建自动化测试脚本在创建好的测试用例中选择「CICD」,点击新建,…...
utf-8和utf-8 mb4区别
UTF-8(Unicode Transformation Format-8)和UTF-8MB4(UTF-8 Multibyte 4-byte)是字符编码方案,用于表示 Unicode 字符集中的字符。它们之间的主要区别在于编码范围。 UTF-8:UTF-8 是一种变长编码方式&#x…...
考研 408 | 【计算机网络】 应用层
导图 网络应用模型 客户/服务器(c/s)模型 P2P模型 DNS 域名 域名服务器 域名解析过程 文件传输协议FTP FTP服务器和用户端 FTP工作原理 电子邮件 电子邮件的信息格式 组成结构 邮件服务器的功能: 1.发送&接收邮件 2.给发件人报告邮…...
设计模式-单例
概述 在类加载后,整个系统只有一个实例类 饿汉式 public class Mg1 {private static final Mg1 INSTANCE new Mg1();private Mg1(){}public static Mg1 getInstance(){return INSTANCE;}public static void main(String[] args) {System.out.println(Mg1.getIns…...
mysql截取最后一个字符之前的数据
1、mysql截取最后一个字符之前的数据 select --截取斜杠之前的数据REVERSE(SUBSTR(REVERSE(SPNH-dfg-2012) ; --截取斜杠后的数据 INSTR(REVERSE(SPNH-fg-2012),-)1))2、mysql获取最后一个字符后的数据 select SUBSTRING_INDEX(SPNH-dfg-2012,-,-1) 3、mysql更新某个字段…...
Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?
问题及场景 ListView 是 Flutter 开发者第一个学习到的 Widget,因为它可以滑动。一切都会运行得很好,直到 ListView 中的 Item 本身也是一个 ListView。你可能会看到 Flutter 建议你将内部的 ListView 的ShrinkWrap 属性设置为 True。虽然错误消除了&am…...
Appium Desktop安装
【提示:官方已不再维护,建议命令行方式安装,但可以学习了解一下】 Appium Desktop是一款适用于Mac、Windows和Linux的应用程序,它以漂亮灵活的UI为您提供Appium自动化服务器的强大功能。它基本上是Appium Server的图形界面。您可…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
