使用BeautifulSoup搜索具有多个空格和通配符的类标记

时间:2016-05-03 06:02:10

标签: python beautifulsoup findall

我正在尝试使用BeautifulSoup查找所有div个容器,其class属性以“foo bar”开头。我曾希望以下方法有效:

from bs4 import BeautifulSoup

import re

soup.findAll('div',class_=re.compile('^foo bar'))

但是,似乎将类定义分隔为列表,如['foo','bar'],这样正则表达式无法完成我的任务。有没有办法可以完成这项任务? (我已经审查过其他一些帖子,但还没有找到可行的解决方案)

1 个答案:

答案 0 :(得分:0)

你可以使用function that needs to return True or False的语法,lambda也可以做到这一点:

from bs4 import BeautifulSoup as soup
html = '''
<div class="foo bar bing"></div>
<div class="foo bang"></div>
<div class="foo bar1 bang"></div>
'''
soup = soup(html, 'lxml')
res = soup.find_all('div', class_=lambda s:s.startswith('foo bar '))
print(res)
>>> [<div class="foo bar bing"></div>]
res = soup.find_all('div', class_=lambda s:s.startswith('foo bar')) # without space
print(res)
>>> [<div class="foo bar bing"></div>, <div class="foo bar1 bang"></div>]

另一种可能的函数语法:

def is_a_match(clas):
    return clas.startswith('foo bar')

res = soup.find_all('div', class_=is_a_match)

也许这个答案也可以帮到你:https://stackoverflow.com/a/46719313/6655211