BeautifulSoup - 从findAll元素获取类

8 投票
1 回答
12109 浏览
提问于 2025-04-17 14:48

我正在用BeautifulSoup解析一个网站。我知道我想要的内容在一个类名为 contentdiv 里。而且这些内容都是在 p 标签里面。所以我运行了这个代码:

paragraphs= content.findAll('p')

到这里为止都没问题。我遍历这个列表,并设置了一个 if 条件,如果遇到特定的类就会跳出循环。

for para in paragraphs:
    if 'class' in para:
        if para['class']=='end':
            break

但是这并没有奏效。当我运行这个循环时,遇到 end 类时并没有跳出循环。实际上,在遍历循环的过程中,所有元素的类似乎都消失了。

for para in paragraphs:
    if 'class' in para:
        print para['class']

这段代码什么都没打印出来,尽管确实有带类的元素。实际上,这段代码确实能打印出类名 -

>>>paragraphs[0]['class']
u'dateline'

但是,

>>> print 'class' in paragraphs[0]
False

我不太明白这里发生了什么。最后我通过使用异常处理解决了我的问题,但这让我有点困惑。有没有人能解释一下这里发生了什么?

1 个回答

9

当你写 if 'class' in para 时,实际上是在检查段落中是否有这个字“class”。我想你真正想要的是检查这个段落是否有一个类,所以你应该这样写:

for para in paragraphs:
    if para.has_attr('class'):
        if para['class'][0] == 'end': # Notice that I put [0], as para['class'] is a list.
            break

撰写回答