Beautiful Soup之CSS选择器

CSS选择器

使用css选择器,只需要调用selec()方法,传入相应的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">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.select('.panel .panel-heading')) # 选择class为panel节点下的class为panel-heading的节点
print(soup.select('ul li')) # 选择所有ul节点下的所有li节点
print(soup.select('#list-2 .element')) # 选择所有id为list-2的节点下的class为element的所有节点
print(type(soup.select('ul')[0])) # 类型依然是Tag

在这里插入图片描述

  • 嵌套选择
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">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
for ul in soup.select('ul'):
    # 选择为ul的所有节点,然后再选择所有ul节点中的所有li节点
    print(ul.select('li'))

输出为两个列表,各列表里的内容都是各ul节点下的li节点。
在这里插入图片描述

  • 获取属性
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">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
for ul in soup.select('ul'):
    # 这两个方法输出的内容都一样
    print(ul['id'])
    # print(ul.attrs['id'])

在这里插入图片描述

  • 获取文本

获取文本可以直接调用string属性,另外也可以使用get_text()

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">Foo</li>
<li class="element">Bar</li>
<li class="element">Jay</li>
</ul>
<ul class="list-small" id="list-2">
<li class="element">Foo</li>
<li class="element">Bar</li>
</ul>
</div>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
for li in soup.select('li'):
    print("string: " + li.string)
    print("get_text(): " + li.get_text())

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43670190/article/details/106459776
今日推荐