BeautifulSoup
是一个用于从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器(例如lxml,html5lib)来解析这些文件。下面是一个基本的使用指南。
一、安装
首先,你需要安装 beautifulsoup4
包,这通常可以通过pip完成:
pip install beautifulsoup4
如果你想使用 lxml
的解析器(速度快,效率高),你还需要安装 lxml
:
pip install lxml
二、基本使用
导入BeautifulSoup类,并加载一个文档。
from bs4 import BeautifulSoup
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>
"""
soup = BeautifulSoup(html_doc, 'html.parser') # 或者 'lxml' 来使用lxml解析器
三、导航树结构
# 访问标签内容
soup.title
# <title>The Dormouse's story</title>
soup.title.name
# 'title'
soup.title.string
# 'The Dormouse's story'
soup.title.parent.name
# 'head'
soup.p
# <p class="title"><b>The Dormouse's story</b></p>
soup.p['class']
# ['title']
soup.a
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
soup.find_all('a')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, ...]
soup.find(id="link3")
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
四、搜索文档树
find_all()
和 find()
是BeautifulSoup中的两个常用方法,它们用于搜索文档树并提取信息。
基本调用格式如下:
find(name, attrs, recursive, string, **kwargs)
find_all(name, attrs, recursive, string, **kwargs)
参数说明:
name
:要查找的标签的名称或者匹配名称的任何对象。attrs
:一个 Python 字典,包含标签的属性。你可以添加一个或多个属性来精确匹配。recursive
:如果为 True(默认值),find()
方法会检查当前标签的所有子孙节点。如果为 False,则只检查当前标签的直接子节点。string
:用于查找标签的文本内容。你可以使用字符串、正则表达式、列表或者 True。**kwargs
:特定属性过滤器,例如id
、class_
等。
4.1 find_all()
find_all()
方法搜索当前标签的所有子孙节点,并返回所有符合条件的标签内容。这是一个非常灵活的方法,因为它允许你指定你想要检索的标签的名称、属性、内容,甚至是使用函数来进行复杂的匹配。
这是find_all()
的一些基本用法:
soup.find_all('tag_name') # 返回包含所有<tag_name>标签的列表
soup.find_all(['tag1', 'tag2']) # 返回包含所有<tag1>和<tag2>标签的列表
soup.find_all(id='tag_id') # 返回包含所有id属性为'tag_id'的标签的列表
soup.find_all(class_='class_name') # 返回包含所有class属性为'class_name'的标签的列表
soup.find_all(attrs={'attribute_name': 'value'}) # 返回包含所有具有指定属性的标签的列表
soup.find_all(text='text') # 返回包含文本内容为'text'的标签的列表
soup.find_all(limit=2) # 返回最多2个符合条件的标签
4.2 find()
find()
方法与find_all()
类似,但它只返回找到的第一个符合条件的标签。如果文档中存在多个匹配项,find()
将只返回第一个匹配项。这对于只需要一个元素,或者确定只有一个元素存在时特别有用。
以下是find()
的一些基本用法:
soup.find('tag_name') # 返回第一个<tag_name>标签
soup.find(id='tag_id') # 返回第一个id属性为'tag_id'的标签
soup.find(class_='class_name') # 返回第一个class属性为'class_name'的标签
soup.find(attrs={'attribute_name': 'value'}) # 返回第一个具有指定属性的标签
soup.find(text='text') # 返回第一个文本内容为'text'的标签
4.3 使用场景
通常来说,如果你只需要找到一个特定的元素,比如一个具有特定 ID 的元素,你会使用 find()
。如果你需要获取多个元素,比如文档中所有的链接,你会使用 find_all()
。
4.4 举例说明
HTML 文档:
<html>
<body>
<h1>Header 1</h1>
<h2>Header 2</h2>
<p>First Paragraph.</p>
<p>Second Paragraph.</p>
</body>
</html>
如果你使用 find_all()
:
paragraphs = soup.find_all('p')
# 返回的是包含所有 <p> 标签的列表
如果你使用 find()
:
first_paragraph = soup.find('p')
# 返回的是第一个 <p> 标签
五、标签Tag对象操作
5.1 获取和设置属性
tag['attr']
: 获取标签的某个属性值,比如tag['href']
获取<a>
标签的链接地址。tag.attrs
: 获取一个字典,包含了标签的所有属性。tag['attr'] = 'new value'
: 设置或修改标签的属性值。
5.2 访问标签的内容
tag.string
: 如果标签只有一个子节点,并且这个子节点是字符串类型,tag.string
返回子字符串。如果标签包含多个子节点,tag.string
将返回None
。tag.get_text()
: 提取标签内的所有文本内容,包括子标签内的文本。tag.text
: 类似tag.get_text()
,提取标签内的所有文本内容。
5.3 寻找标签
tag.find(name, attrs, recursive, string, **kwargs)
: 返回匹配查询的第一个标签。tag.find_all(name, attrs, recursive, string, limit, **kwargs)
: 返回一个包含所有匹配查询的标签的列表。tag.find_parent(name, attrs, string, **kwargs)
: 查找当前标签的父标签。tag.find_parents(name, attrs, string, limit, **kwargs)
: 递归查找当前标签的所有父标签。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
62fe4e9.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)