Beautiful Soup--04 CSS选择器

这篇博客介绍了如何利用Python的BeautifulSoup库,通过CSS选择器来选取HTML文档中的特定节点。示例中展示了选择节点、嵌套选择以及获取节点属性和文本的方法。对于CSS选择器的使用,包括类选择器、ID选择器以及多层选择等。

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

使用CSS选择器时,只需调用select()方法,传入相应的CSS选择器即可,示例如下:

html='''
<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1" name='elements'>
            <li class="element">qing</li>
            <li class="element">xu</li>
            <li class="element">ju</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">qing</li>
            <li class="element">ju</li>
        </ul>
    </div>
</div>
'''

from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
#选择.panel节点下所有.panel-heading节点的内容
print(soup.select('.panel .panel-heading'),'\n')
#选择所有ul节点下面的所有li节点,结果便是所有的li节点组成的列表
print(soup.select('ul li'),'\n')
#id选择器使⽤“#”进⾏标识,后⾯紧跟id名.
#类选择器使⽤“.”(英⽂点号)进⾏标识,后⾯紧跟类名
print(soup.select('#list-2 .element'),'\n')
#输出了列表中元素的类型。类型依然是Tag类型
print(type(soup.select('ul')[0]))

运行结果:

[<div class="panel-heading">
<h4>Hello</h4>
</div>] 

[<li class="element">qing</li>, <li class="element">xu</li>, <li class="element">ju</li>, <li class="element">qing</li>, <li class="element">ju</li>] 

[<li class="element">qing</li>, <li class="element">ju</li>] 

<class 'bs4.element.Tag'>

用了3次CSS选择器,返回的结果均是符合CSS选择器的节点组成的列表。

  • 嵌套选择

select()方法同样支持嵌套选择。例如,先选择所有的ul节点,再遍历每个ul节点,选择其li节点,示例如下:

from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
for ul in soup.select('ul'):
    print(ul.select('li'))

运行结果:

[<li class="element">qing</li>, <li class="element">xu</li>, <li class="element">ju</li>]
[<li class="element">qing</li>, <li class="element">ju</li>]
  • 获取属性

我们知道节点类型是Tag类型,所有获取属性还可以用原来的方法。

from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
for ul in soup.select('ul'):
    print(ul['id'])
    print(ul.attrs['id'])

运行结果:

list-1
list-1
list-2
list-2

可以看到,直接传入中括号和属性名,以及通过attrs属性获取属性值,都可以成功。

  • 获取文本

要获取文本,当然也可以用前面所讲的string属性。此外,还有一个办法,那就是get_text(),示例如下:

from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
for li in soup.select('li'):
    print('Get Text:',li.get_text())
    print('String:',li.string)

运行结果:

Get Text: qing
String: qing
Get Text: xu
String: xu
Get Text: ju
String: ju
Get Text: qing
String: qing
Get Text: ju
String: ju

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值