天天看点

python bs4 find_all_bs4 findAll找不到类标记

例如:>>> text = "

spam "

>>> soup = BeautifulSoup(text, 'html.parser')

>>> soup.span['class']

['a', 'b', 'c']

要搜索多值属性,应传递多个值:

^{pr2}$

请注意,即使BeautifulGroup将值显示为一个列表,但它们实际上更像一个集合,您可以按任何顺序传递相同的值,并且忽略重复项:>>> soup.find('span', class_={'a', 'b', 'c'})

spam

>>> soup.find('span', class_=('c', 'b', 'a', 'a'))

spam

也可以使用字符串搜索多值属性,这将查找其属性将该字符串作为其值之一的任何元素:>>> soup.find('span', class_='c')

spam

但是如果你传递一个带空格的字符串…据我所知,它的作用并没有被记录下来,但是在实际操作中,它将完全匹配解析器将字符串交给BeautifulSoup的(任意的)方式。在

正如您在上面看到的,即使HTML中有'a b c ',beauthulsoup已经将它变成了'a b c'-从末尾去掉空白,并将所有内部空白转换成单个空格。所以,这就是你要搜索的:>>> soup.find('span', class_='a b c ')

>>> soup.find('span', class_='a b c')

spam

但是,同样地,你最好用一个序列或一组单独的值进行搜索,而不是试图猜测如何将它们组合成一个碰巧有效的字符串。在

所以,你想做的可能是:for cell in row.find_all('td', {'class': ('column-even', 'table-column-even', 'ft_enrolled')}):

或者,也许您不想用DOM术语来思考,但是in CSS-selector terms:>>> soup.select('span.a.b.c')

[spam]

请注意,CSS也不关心类的顺序或重复项:>>> soup.select('span.c.a.b.c')

[spam]

此外,这允许您搜索类的一个子集,而不仅仅是其中的一个或全部:>>> soup.select('span.c.b')

[spam]

1。这是一个很漂亮的汤。这一点也不必提,因为BS3已经死了将近10年了,而且不能运行在python3.x上,甚至在某些情况下甚至不能运行2.7。但是人们不断地复制和粘贴旧的BS3代码到博客文章和堆栈溢出答案中,所以其他人总是惊讶于他们在网上找到的代码实际上不起作用。如果这就是这里发生的事情,你需要学会识别BS3代码,这样你就可以忽略它,然后去别处看看。