Python解析网页
目录
1、Beautiful Soup
2、解析数据
3、遍历文档树
4、搜索文档树
一、Beautiful Soup
1、什么是Beautiful Soup
定义:Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.
功能:它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.
优点:Beautiful Soup会帮你节省数小时甚至数天的工作时间.
2、解析器
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器:
| 解析器 | 使用方法 | 优势 | 劣势 |
|---|---|---|---|
| Python标准库 | BeautifulSoup(markup, "html.parser") | Python的内置标准库执行速度适中文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
| lxml HTML 解析器 | BeautifulSoup(markup, "lxml") | 速度快文档容错能力强 | 需要安装C语言库 |
| lxml XML 解析器 | BeautifulSoup(markup, ["lxml-xml"])``BeautifulSoup(markup, "xml") | 速度快唯一支持XML的解析器 | 需要安装C语言库 |
| html5lib | BeautifulSoup(markup, "html5lib") | 最好的容错性以浏览器的方式解析文档生成HTML5格式的文档 | 速度慢不依赖外部扩展 |
3、安装与配置
# 安装requests模块
pip install requests==2.10.0
# 安装beautiful soup4
pip install bs4
# 安装lxml解析器
pip install lxml
二、解析数据
1、标签
每个tag都有自己的名字,通过soup.name来获取标签。
# 获取p标签
p = soup.p
print(p)
# 获取title标签
title = soup.title
print(title)
注意:如果有多个相同的标签,则会返回第一个。
2.1属性
一个标签可能有很多个属性。例如:标签 <b class="boldest"> 有一个 class 的属性,值为 boldest 。标签的属性的操作方法与字典相同。
-
获取指定标签的单一属性,类似字典方式
# 获取p标签的class属性
attrs = soup.p["class"]
print(attrs)
注意:最常见的多值的属性是 class (一个标签可以有多个CSS的class). 还有一些属性 rel , rev , accept-charset , headers , accesskey . 在Beautiful Soup中多值属性的返回类型是list。
-
获取指定标签的单一属性,通过
attrs方式
# 通过attrs获取p标签的id属性
id_ = soup.p.attrs["id"]
print(id_)
-
获取指定标签的所有属性:
# 获取指定标签的所有属性
p_attrs = soup.p.attrs
print(p_attrs)
2、标签内容
通过.text和.string获取标签节点的内容,也可以通过.strings获取标签节点下的所有内容。
# 获取单个标签的内容
text = soup.p.text
print(text)
print(soup.p.string)
# 获取该标签下所有的内容,返回generator生成器
strings = soup.div.strings
for st in strings:print(st)
三、遍历文档树
1、子节点
标签小技巧获取层级子节点:
# tag小技巧获取层级子节点
print(soup.body.div.p)
.contents:将标签的子节点以列表的方式输出
# 获取div标签下的所有子节点
print(soup.body.div.contents)# 获取div标签下的第二个子节点
print(soup.body.div.contents[1])# 获取div标签下的第二个子节点的标签名
print(soup.body.div.contents[1].name)# 获取div标签下的第二个子节点的所有属性
print(soup.body.div.contents[1].attrs)
.children:对标签的子节点进行循环
# 获取div下的的子节点
children = soup.body.div.children
print(children)
# 循环打印节点信息
for child in children:print(child)
.descendants:对所有标签的子孙节点进行递归循环
descendants = soup.body.descendants
for des in descendants:print(des)
2、父节点
.parent:获取某个元素的父节点
print(soup.p.parent)
.parents:递归得到元素的所有父辈节点
parents = soup.p.parents
for p in parents:
print(p)
3、兄弟节点
.next_sibling:获取下级单个兄弟节点
print(soup.p.next_sibling.next_sibling)
.previous_sibling:获取上级单个兄弟节点
print(soup.body.previous_sibling.previous_sibling)
注意:在使用.next_sibling和.previous_sibling获取单个兄弟节点时,兄弟节点之间存在顿号和换行符的可能!!!
四、搜索文档树
1、find
find方法,语法格式如下:
find( name , attrs , recursive , string , **kwargs )
参数说明:
| 参数 | 说明 |
|---|---|
name | 需要查找的标签名,可以是字符串、正则表达式、列表或True |
attrs | 需要查找的标签的属性,可以是字典类型或关键字参数 |
recursive | 是否递归地搜索子标签,默认为True,即会搜索所有子孙标签 |
string | 需要查找的标签中包含的文本内容 |
kwargs | 其他属性条件 |
通过find方法搜索指定的标签。
print(soup.find('p', class_="aa"))
print(soup.find('p', class_="aa", id="username"))
注意:class类样式的处理。
True 可以匹配任何值,如下示例返回第一个节点:
print(soup.find(True))
2、find_all
find_all()方法的基本语法如下:
find_all(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
参数说明:
| 参数 | 说明 |
|---|---|
name | 需要查找的标签名,可以是字符串、正则表达式、列表或True |
attrs | 需要查找的标签的属性,可以是字典类型或关键字参数 |
recursive | 是否递归地搜索子标签,默认为True,即会搜索所有子孙标签 |
text | 需要查找的标签中包含的文本内容 |
limit | 限制返回的结果数量,可以传入一个整数值 |
返回值:
-
如果找到满足条件的元素,则返回一个包含这些元素的列表。
-
如果未找到满足条件的元素,则返回一个空列表。
find_add方法搜索当前标签下所有子节点,并判断是否符合过滤器的条件。
all = soup.find_all('p')
for a in all:print(a)
print(soup.find_all(["p", "input"]))
3、css选择器
Beautiful Soup支持大部分的CSS选择器。在 Tag 或 BeautifulSoup 对象的 .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到标签:
print(soup.select("title"))
print(soup.select("body div"))
print(soup.select("p.aa"))相关文章:
Python解析网页
目录 1、Beautiful Soup 2、解析数据 3、遍历文档树 4、搜索文档树 一、Beautiful Soup 1、什么是Beautiful Soup 定义:Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库. 功能:它能够通过你喜欢的转换器实现惯用的文档导航,查找,修…...
IDEA连接MySQL后如何管理数据库
上一节讲解了IDEA如何连接MySQL数据库管理系统,接下来我们就可以在IDEA里使用MySQL来管理数据库了。那么如果我们现在还没有创建需要的数据库怎么办?本节就来教大家如何在IDEA连接MySQL后管理数据库(创建/修改/删除数据库、创建/修改/删除表、插入/更新/…...
linux新机快速配置ssh
配置SSH以实现证书登录 要配置新的Linux机器以实现证书登录,您需要执行以下步骤: 安装SSH服务器: sudo apt-get install openssh-server修改SSH端口(可选): SSH配置文件(通常位于/etc/ssh/sshd…...
使用elementUI的form表单校验时,错误提示位置异常解决方法
问题 最近在做项目时遇到一个问题,使用elementUI的Descriptions 描述列表与form表单校验时,遇到校验信息显示的位置不对,效果如图: 期望显示在表格中。 效果 代码 html <el-form :model"form":rules"rules…...
Android面试题之Kotlin常见集合操作技巧
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…...
网络拓扑—DNS服务搭建
文章目录 DNS服务搭建网络拓扑配置网络DNSPC 安装DNS服务配置DNS服务创建正向查找区域创建反向查找区域创建子域名 PC机DNS域名解析 DNS服务搭建 网络拓扑 为了节省我的U盘空间,没有用路由器,所以搭建的环境只要在同网段即可。 //交换机不用考虑 DNS&a…...
Mybatis-Plus笔记
1.MP基础 1.1 MP常见注解 TableName(“指定表明”) TableName("tb_user") // 指定表名 Data NoArgsConstructor AllArgsConstructor Builder public class User {private Long id;private String userName;private String password;private String name;private I…...
“高考钉子户”唐尚珺决定再战2024年高考
“高考钉子户”唐尚珺决定在2024年再次参加高考,这个选择确实很特别也很有趣。十几年连续参加高考,他已经积累了大量的备考经验和应试技巧。这样的经验对于高考辅导机构来说无疑是非常宝贵的资源,他如果选择去辅导机构当老师,应该…...
Hive安装教程
前置条件:hadoop&mysql docker容器安装mysql-CSDN博客 以下的/opt/bigdata目录根据自己实际情况更改 1.上传hive包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/bigdata/ 2.修改路径 mv /opt/bigdata/apache-hive-3.1.3-bin/ hive cd /opt/bigdata/hive/…...
使用Python Tkinter创建GUI应用程序
大家好,当我们谈及使用Python Tkinter创建GUI应用程序时,我们涉及的不仅是技术和代码,更是关于创造力和用户体验的故事。Tkinter作为Python标准库中最常用的GUI工具包,提供了丰富的功能和灵活的接口,让开发者能够轻松地…...
使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)
在 3D 点云处理中,RT 矩阵是一个常用的工具,用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念,并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…...
CTFHUB技能树——SSRF(二)
目录 上传文件 FastCGI协议 Redis协议 上传文件 题目描述:这次需要上传一个文件到flag.php了.祝你好运 index.php与上题一样,使用POST请求的方法向flag.php传递参数 //flag.php页面源码 <?phperror_reporting(0);if($_SERVER["REMOTE_ADDR&…...
Vue3实现简单的瀑布流效果,可抽离成组件直接使用
先来看下效果图: 瀑布流中的内容可进行自定义,这里的示例图是通过不同背景颜色的展示进行区分,每个瀑布流中添加了自定义图片和文字描述。 实现方式: 1.建立子组件(可单独抽离)写出瀑布流的样式 文件名为…...
【已解决】C#如何消除Halcon上一次显示窗口的涂层
前言 在通过C#进行封装Halcon的时候发现一个问题,就是如果我重新去标定一个图像的时候不能把上一次的清掉,然后之前的会覆盖掉原来的,这个确实是这样,但是如果说现在的图像面积比之前的小的那么就没有任何效果显示,因…...
XShell-连接-Centos 7
XShell 连接Centos 7 一.准备 安装XShell XShell下载地址: 在虚拟机上安装Centos 7,具体操作自行学习 二.Centos 7的准备 1.网络适配器修改为NAT 2.获取IP 输入命令: ip addr我的Centos 7对外IP为192.168.174.129 三.XShell连接Cento…...
vue3 组件刷新
在 Vue 3 中,如果你想刷新一个组件,有几种方法可以实现。 使用 key 属性: 当你想要强制重新渲染一个组件时,你可以为其添加一个独特的 key 属性。当 key 属性的值改变时,Vue 会强制组件重新创建。 <template> <MyComp…...
Java进阶学习笔记14——模板方法设计模式
面试和看源码。 谈到设计模式: 1、解决了什么问题? 2、怎么写? 模板方法设计模式解决了什么问题? 解决方法中存在重复代码的问题。 写法: 1)定义一个抽象类: 2)在里面定义两个方…...
Centos7静态路由和动态路由
路由,即路由选择(Routing),是指在计算机网络中选择数据传输路径的过程。路由器(Router)是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中,选择最佳路径将数据包从源节点传递到…...
戴尔(Dell)服务器运行状况监控
戴尔(Dell)服务器因其加速的性能、增强的自动化和简化的管理而受到全球许多组织的青睐,许多组织将其业务关键应用程序和功能放在戴尔(Dell)服务器中,因此,有效的戴尔(Dell࿰…...
如何永久保存微信聊天记录?WeChatMsg免费工具终极指南
如何永久保存微信聊天记录?WeChatMsg免费工具终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
软件开发中的架构:概念、价值与常见模式
在软件工程实践中,“架构”是一个高频出现但又常被误解的术语。很多人将其等同于技术选型或框架选择,但实际上,软件架构远不止于此。它关乎系统的整体结构、组件之间的关系以及指导系统演进的核心原则。本文将系统性地解释什么是软件架构、为…...
Dirsearch字典玄学:从默认字典到AI生成,我的扫描效率提升300%的秘密
Dirsearch字典玄学:从默认字典到AI生成,我的扫描效率提升300%的秘密 在Web安全测试的战场上,目录扫描工具就像侦察兵手中的望远镜,而字典则是望远镜的镜片质量。从业五年来,我见证了太多安全工程师将90%的时间浪费在无…...
Torch-Pruning高效剪枝实战:解决BERT模型部署中的计算资源瓶颈问题
Torch-Pruning高效剪枝实战:解决BERT模型部署中的计算资源瓶颈问题 【免费下载链接】Torch-Pruning [CVPR 2023] Towards Any Structural Pruning; LLMs / Diffusion / Transformers / YOLOv8 / CNNs 项目地址: https://gitcode.com/gh_mirrors/to/Torch-Pruning …...
2026指纹浏览器与Web端设备识别技术的对抗与协同:从风控博弈到合规共生
在 2026 年的 Web 生态中,指纹浏览器与 Web 端设备识别技术始终处于 “对抗与协同” 的动态平衡中 —— 平台通过设备识别技术构建风控体系,防范恶意注册、批量操作、账号盗用等违规行为;指纹浏览器通过技术手段重构设备特征,实现…...
IDEA全局替换不够用?试试这个Java脚本,精准处理多模块项目文件内容替换
IDEA全局替换不够用?试试这个Java脚本,精准处理多模块项目文件内容替换 在大型Java项目中,我们经常需要批量修改代码中的某些字符串或配置。虽然IntelliJ IDEA提供了"Replace in Path"功能,但在实际企业级开发中&#…...
LLaMA-Omni推理部署全攻略:本地与云端部署的最佳实践
LLaMA-Omni推理部署全攻略:本地与云端部署的最佳实践 【免费下载链接】LLaMA-Omni LLaMA-Omni is a low-latency and high-quality end-to-end speech interaction model built upon Llama-3.1-8B-Instruct, aiming to achieve speech capabilities at the GPT-4o l…...
解锁图像标注效率:LabelImg亮度调节功能提升标注准确性全指南
解锁图像标注效率:LabelImg亮度调节功能提升标注准确性全指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check…...
终极fabio配置验证指南:避免生产环境错误的10个实用技巧
终极fabio配置验证指南:避免生产环境错误的10个实用技巧 【免费下载链接】fabio Consul Load-Balancing made simple 项目地址: https://gitcode.com/gh_mirrors/fa/fabio fabio是一个快速、现代的零配置负载均衡HTTP(S)和TCP路由器,专为Consul管…...
Pixel Mind Decoder 效果对比评测:在不同文体和语言风格下的表现
Pixel Mind Decoder 效果对比评测:在不同文体和语言风格下的表现 1. 核心能力概览 Pixel Mind Decoder 是一款专注于文本情绪解码的模型,能够识别和分析不同文本中蕴含的情感倾向。与通用情感分析工具不同,它特别擅长处理复杂语境下的微妙情…...
