BeautifulSoup - 从findAll元素获取类
我正在用BeautifulSoup解析一个网站。我知道我想要的内容在一个类名为 content
的 div
里。而且这些内容都是在 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