一、方法描述
在 BeautifulSoup 库中,select()
方法是一个用于抓取 HTML/XML 文档的重要工具。类似于 find()
和 find_*()
方法,select()
方法同样帮助定位满足给定条件的元素。文档树中的元素选择基于传递给它的 CSS 选择器进行。
Beautiful Soup 还提供了 select_one()
方法。select()
和 select_one()
的区别在于,select()
返回一个包含所有满足 CSS 选择器的 PageElement
的 ResultSet
;而 select_one()
则返回满足基于 CSS 选择器的选择标准的第一个元素。
在 Beautiful Soup 4.7 版本之前,select()
方法仅支持常见的 CSS 选择器。到了版本 4.7,Beautiful Soup 集成了 Soup Sieve CSS 选择器库,从而可以使用更多的选择器。在 4.12 版本中,除了现有的 select()
和 select_one()
方法之外,还添加了一个 .css
属性。
二、语法
select(selector, limit, **kwargs)
三、参数
如果 limit
参数设置为 1,则等同于 select_one()
方法。
四、返回值
select()
方法返回一个 Tag
对象的 ResultSet
。select_one()
方法返回一个单一的 Tag
对象。
Soup Sieve 库有不同的 CSS 选择器类型。基本的 CSS 选择器如下:
-
类型选择器 匹配节点名称的元素。例如:
tags = soup.select('div')
-
通用选择器(*) 匹配任何类型的元素。例如:
tags = soup.select('*')
-
ID 选择器 基于元素的 id
属性进行匹配。符号 #
表示 ID 选择器。例如:
tags = soup.select("#nm")
-
类选择器 基于 class
属性中的值进行匹配。类名前缀的 .
符号是 CSS 类选择器。例如:
tags = soup.select(".submenu")
五、示例
示例:类型选择器
from bs4 import BeautifulSoup, NavigableString
markup = '''
<div id="Languages">
<p>Java</p> <p>Python</p> <p>C++</p>
</div>
'''
soup = BeautifulSoup(markup, 'html.parser')
tags = soup.select('div')
print(tags)
输出:
[<div id="Languages">
<p>Java</p> <p>Python</p> <p>C++</p>
</div>]
示例:ID 选择器
from bs4 import BeautifulSoup
html = '''
<form>
<input type = 'text' id = 'nm' name = 'name'>
<input type = 'text' id = 'age' name = 'age'>
<input type = 'text' id = 'marks' name = 'marks'>
</form>
'''
soup = BeautifulSoup(html, 'html.parser')
obj = soup.select("#nm")
print(obj)
输出:
[<input id="nm" name="name" type="text"/>]
示例:类选择器
html = '''
<ul>
<li class="mainmenu">Accounts</li>
<ul>
<li class="submenu">Anand</li>
<li class="submenu">Mahesh</li>
</ul>
<li class="mainmenu">HR</li>
<ul>
<li class="submenu">Rani</li>
<li class="submenu">Ankita</li>
</ul>
</ul>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
tags = soup.select(".mainmenu")
print(tags)
输出:
[<li class="mainmenu">Accounts</li>, <li class="mainmenu">HR</li>]