安
安迪Python
V1
2022/07/08阅读:87主题:默认主题
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. 总结

作者介绍
安
安迪Python
V1