安迪Python

V1

2022/07/08阅读:11主题:默认主题

20 CSS选择器的嵌套选择 属性 文本获取章

20 CSS选择器的嵌套选择 属性 文本获取

1. CSS选择器的嵌套选择

CSS选择器的嵌套选择和节点选择器的嵌套选择是一样的。
都是先选择一个节点,
然后再获取这个节点下面的子节点。

步骤1:bs对象.select方法(节点名ul)——先获取ul节点

步骤2:for ul_duixiang in bs_duixiang.select("ul")——利用for循环遍历列表中的ul节点:

步骤3:节点对象.select方法(节点名li)——利用ul节点获取li节点:

# 声明一个字符串变量html_str 存储HTML代码
html_str='''
<html>
    <head><meta charset="utf-8"><title>安迪Python</title></head>
    <body>
        <div class="heading">
            <h4>2022年6月30日</h4>
        </div>
        <div class="panel">            
            <div class="heading">
                <h4>古诗2首</h4>
            </div>
            <div class="body">
                <ul class="list" id="list-1">
                    <li class="element">本是青灯不归客</li>
                    <li class="element">却因浊酒留风尘</li>
                    <li class="element">终是庄周梦了蝶</li>
                    <li class="element">你是恩赐也是劫</li>

                </ul>
                <ul class="list list-small" id="list-2">
                    <li class="element">知否?知否?</li>
                    <li class="element">应是绿肥红瘦</li>
                </ul>
            </div>
        </div>
    </body>
</html>
'''

# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup

# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象 
bs_duixiang = BeautifulSoup(html_str, 'lxml')

print("任务是获取ul节点下的li节点:","\n")

print("步骤1:bs对象.select方法(节点名ul)——先获取ul节点:","\n")
print("返回值:返回的是一个列表,里面包含2个ul节点:","\n")
print(bs_duixiang.select("ul"),"\n")


print("步骤2:利用for循环遍历列表中的ul节点:","\n")
a = 1
for ul_duixiang in bs_duixiang.select("ul"):
    
    print("获取到的第{}个ul节点:".format(a))
    print(ul_duixiang)
    print("获取到的ul是节点类型:",type(ul_duixiang),"\n")

    print("步骤3:节点对象.select方法(节点名li)——利用ul节点获取li节点:")
    print(ul_duixiang.select("li"),"\n")
    a += 1 

【终端输出】

任务是获取ul节点下的li节点: 

步骤1:bs对象.select方法(节点名ul)——先获取ul节点: 

返回值:返回的是一个列表,里面包含2个ul节点: 

[<ul class="list" id="list-1">
<li class="element">本是青灯不归客</li>
<li class="element">却因浊酒留风尘</li>
<li class="element">终是庄周梦了蝶</li>
<li class="element">你是恩赐也是劫</li>
</ul>, <ul class="list list-small" id="list-2">
<li class="element">知否?知否?</li>
<li class="element">应是绿肥红瘦</li>
</ul>] 

步骤2:利用for循环遍历列表中的ul节点: 

获取到的第1个ul节点:
<ul class="list" id="list-1">
<li class="element">本是青灯不归客</li>
<li class="element">却因浊酒留风尘</li>
<li class="element">终是庄周梦了蝶</li>
<li class="element">你是恩赐也是劫</li>
</ul>
获取到的ul是节点类型: <class 'bs4.element.Tag'> 

步骤3:节点对象.select方法(节点名li)——利用ul节点获取li节点:
[<li class="element">本是青灯不归客</li>, <li class="element">却因浊酒留风尘</li>, <li class="element">终是庄周梦了蝶</li>, <li class="element">你是恩赐也是劫</li>] 

获取到的第2个ul节点:
<ul class="list list-small" id="list-2">
<li class="element">知否?知否?</li>
<li class="element">应是绿肥红瘦</li>
</ul>
获取到的ul是节点类型: <class 'bs4.element.Tag'> 

步骤3:节点对象.select方法(节点名li)——利用ul节点获取li节点:
[<li class="element">知否?知否?</li>, <li class="element">应是绿肥红瘦</li>] 

2. CSS选择器的属性获取

语法:bs对象.节点名.attrs—获取节点属性

CSS选择器获取属性的方法和节点选择器的获取属性的方法是一样的。

# 声明一个字符串变量html_str 存储HTML代码
html_str='''
<html>
    <head><meta charset="utf-8"><title>安迪Python</title></head>
    <body>
        <div class="heading">
            <h4>2022年6月30日</h4>
        </div>
        <div class="panel">            
            <div class="heading">
                <h4>古诗2首</h4>
            </div>
            <div class="body">
                <ul class="list" id="list-1">
                    <li class="element">本是青灯不归客</li>
                    <li class="element">却因浊酒留风尘</li>
                    <li class="element">终是庄周梦了蝶</li>
                    <li class="element">你是恩赐也是劫</li>

                </ul>
                <ul class="list list-small" id="list-2">
                    <li class="element">知否?知否?</li>
                    <li class="element">应是绿肥红瘦</li>
                </ul>
            </div>
        </div>
    </body>
</html>
'''

# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup

# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象 
bs_duixiang = BeautifulSoup(html_str, 'lxml')

print("步骤1:bs对象.节点名.attrs—获取节点属性:","\n")
print("html的属性:",bs_duixiang.html.attrs)
print("body的属性:",bs_duixiang.body.attrs)
print("meta的属性:",bs_duixiang.meta.attrs)
print("div的属性:",bs_duixiang.div.attrs)
print("ul的属性:",bs_duixiang.ul.attrs)
print("li的属性:",bs_duixiang.li.attrs)

【终端输出】

步骤1:bs对象.节点名.attrs—获取节点属性: 

html的属性: {}
body的属性: {}
meta的属性: {'charset': 'utf-8'}
div的属性: {'class': ['heading']}
ul的属性: {'class': ['list'], 'id': 'list-1'}
li的属性: {'class': ['element']}

3. CSS选择器的文本获取

语法:bs对象.节点名.string—获取节点文本

# 声明一个字符串变量html_str 存储HTML代码
html_str='''
<html>
    <head><meta charset="utf-8"><title>安迪Python</title></head>
    <body>
        <div class="heading">
            <h4>2022年6月30日</h4>
        </div>
        <div class="panel">            
            <div class="heading">
                <h4>古诗2首</h4>
            </div>
            <div class="body">
                <ul class="list" id="list-1">
                    <li class="element">本是青灯不归客</li>
                    <li class="element">却因浊酒留风尘</li>
                    <li class="element">终是庄周梦了蝶</li>
                    <li class="element">你是恩赐也是劫</li>

                </ul>
                <ul class="list list-small" id="list-2">
                    <li class="element">知否?知否?</li>
                    <li class="element">应是绿肥红瘦</li>
                </ul>
            </div>
        </div>
    </body>
</html>
'''

# 1. 从bs4解析库导入BeautifulSoup类用于解析数据
from bs4 import BeautifulSoup

# 2.1 BeautifulSoup类(要解析的字符串,解析器)
# 2.2 传入要解析的字符串html_str和解析器lxml,实例化类得到一个BeautifulSoup对象 
bs_duixiang = BeautifulSoup(html_str, 'lxml')

print("步骤1:bs对象.节点名.string—获取当前节点的文本内容:","\n")
print("div节点的文本内容:",bs_duixiang.div.string)
print("ul节点的文本内容:",bs_duixiang.ul.string)
print("li节点的文本内容:",bs_duixiang.li.string,"\n")

print("步骤2:bs对象.节点名.strings—获取当前节点及子孙节点下的文本内容:")
print("ul节点及其子孙节点的文本内容,用strings属性得到的是一个生成器,用for循环取值:",bs_duixiang.ul.strings)
for i in bs_duixiang.ul.strings:
    print(i)

【终端输出】

步骤1:bs对象.节点名.string—获取当前节点的文本内容: 

div节点的文本内容: None
ul节点的文本内容: None
li节点的文本内容: 本是青灯不归客 

步骤2:bs对象.节点名.strings—获取当前节点及子孙节点下的文本内容:
ul节点及其子孙节点的文本内容,用strings属性得到的是一个生成器,用for循环取值: <generator object Tag._all_strings at 0x0000022F94747A50>


本是青灯不归客


却因浊酒留风尘


终是庄周梦了蝶


你是恩赐也是劫

string 是用来获取当前节点下的文本内容。
strings 是用来获取当前节点及子孙节点下的文本内容。

4. 总结

31
31

分类:

后端

标签:

Python

作者介绍

安迪Python
V1