Beautiful Soup的使用

本文介绍了如何使用BeautifulSoup解析HTML文档,包括文档的编码处理、基本的属性操作、文档树的操作方法以及如何利用过滤器进行精确查找。还详细解释了find_all和find等常用方法的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


##编码
任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode:
通过Beautiful Soup输出文档时,不管输入文档是什么编码方式,输出编码均为UTF-8编码

智能检测编码
dammit = UnicodeDammit(“Sacr\xc3\xa9 bleu!”)
print(dammit.unicode_markup)
##属性
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
###Tag
tag.name 显示标签名称,可以获取或设置
tag[‘class’] 获取class属性,可添加修改删除
tag.string tag中的字符串
tag.get_text() 获取tag中的文本内容
##文档树操作
soup.a 第一个a节点.非常方便的获取节点
soup.contents 列出所有子节点,列表

##过滤器
过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中.
###字符串
Beautiful Soup会查找与字符串完整匹配的标签

soup.find_all('b')

<b>The Dormouse's story</b>

str(soup) 和unicode(soup),压缩输出,去掉格式,并可设置输出编码
get_text() 只返回文本内容
###正则表达式
如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.
###列表
匹配与列表中任意元素匹配的内容
###方法
方法只接受一个元素参数 ,如果这个方法返回 True 表示当前元素匹配并且被找到

def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')

soup.find_all(has_class_but_no_id)

<p class="title"><b>The Dormouse's story</b></p>,
<p class="story">Once upon a time there were...</p>,
<p class="story">...</p>

##find_all
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.

find_all( name , attrs , recursive , string , **kwargs )

soup.find_all(“title”) 查找子元素中的title标签
soup.find_all(id=“link2”) 查找id属性是link2的标签。由于class是python关键词,使用class_代替
soup.find_all(“p”, “title”) p标签,class属性为title的元素
soup.find_all(string=“Elsie”) 搜索文档内容中有Elsie的标签

soup.find_all(“a”, limit=2) 只返回两条结构
soup.html.find_all(“title”, recursive=False) 只搜索直接节点
##find
只返回一个结果的find_all.
##修改文档
tag.name = “blockquote” 修改标签
tag[‘class’] = ‘verybold’ 修改属性
tag.string = “New link text.” 修改内容

soup = BeautifulSoup(" < a>Foo< / a>")
soup.a.append(“Bar”) a标签中的内容变为FooBar

new_comment = soup.new_string(“Nice to see you.”, Comment)
tag.append(new_comment) 添加一段注释
tag.clear() 移除当前tag内容
i_tag = soup.i.extract() 将当前tag移出父标签,并返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值