Mig*_*sas 5 python beautifulsoup
如何找到li具有特定类名而不是其他类名的标签?例如:
...
<li> no wanted </li>
<li class="a"> not his one </li>
<li class="a z"> neither this one </li>
<li class="b z"> neither this one </li>
<li class="c z"> neither this one </li>
...
<li class="z"> I WANT THIS ONLY ONE</li>
...
Run Code Online (Sandbox Code Playgroud)
编码:
bs4.find_all ('li', class_='z')
返回几个条目,其中有一个"z"和另一个类名。
如何"z"单独找到带有类名的条目?
您可以使用CSS 选择器来匹配确切的类名。
html = '''<li> no wanted </li>
<li class="a"> not his one </li>
<li class="a z"> neither this one </li>
<li class="b z"> neither this one </li>
<li class="c z"> neither this one </li>
<li class="z"> I WANT THIS ONLY ONE</li>'''
soup = BeautifulSoup(html, 'lxml')
tags = soup.select('li[class="z"]')
print(tags)
Run Code Online (Sandbox Code Playgroud)
使用lambda以下方法可以获得相同的结果:
tags = soup.find_all(lambda tag: tag.name == 'li' and tag.get('class') == ['z'])
Run Code Online (Sandbox Code Playgroud)
输出:
[<li class="z"> I WANT THIS ONLY ONE</li>]
Run Code Online (Sandbox Code Playgroud)
看看多值属性。您将了解为什么要class_='z'匹配z其类名中的所有标签。
HTML 4 定义了一些可以有多个值的属性。HTML 5 删除了其中一些,但定义了更多。最常见的多值属性是
class(即一个标签可以有多个 CSS 类)。其他的还包括rel,rev,accept-charset,headers,和accesskey。Beautiful Soup 将多值属性的值显示为列表:Run Code Online (Sandbox Code Playgroud)css_soup = BeautifulSoup('<p class="body"></p>') css_soup.p['class'] # ["body"] css_soup = BeautifulSoup('<p class="body strikeout"></p>') css_soup.p['class'] # ["body", "strikeout"]
可能具有文档中的过滤功能
def is_only_z(css_class):
return css_class is not None and css_class == 'z'
bs4.find_all('li',class_=is_only_z)
Run Code Online (Sandbox Code Playgroud)