如何找到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>
...
代码:
bs4.find_all ('li', class_='z')
返回多个条目,其中有一个"z"
和另一个类名。
如何查找带有类名的条目"z"
, 独自的 ?
您可以使用CSS 选择器 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors以匹配确切的类名称。
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)
使用以下方法可以获得相同的结果lambda
:
tags = soup.find_all(lambda tag: tag.name == 'li' and tag.get('class') == ['z'])
Output:
[<li class="z"> I WANT THIS ONLY ONE</li>]
看一下多值属性 https://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes。你就会明白为什么class_='z'
匹配所有具有的标签z
在他们的班级名称中。
HTML 4 定义了一些可以有多个值的属性。 HTML 5 删除了其中一些,但又定义了一些。最常见的多值属性是class
(也就是说,一个标签可以有多个 CSS 类)。其他包括rel
, rev
, accept-charset
, headers
, and accesskey
。 Beautiful Soup 将多值属性的值呈现为列表:
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"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)