Python BeautifulSoup - 与find和findAll不同的结果

时间:2012-03-22 09:07:46

标签: python beautifulsoup

我正在尝试使用BeautifulSoup解析HTML中嵌入的一些文本,使用“text”属性。 玩“find”和“findAll”,我注意到一些奇怪的东西,无法理解为什么它会以这种方式表现......

import re
import BeautifulSoup

doc = "<html><head><title>Page title</title><title>Author name</title></head>"
soup = BeautifulSoup(doc)

# find test
test1 = soup1.find('title',text=re.compile("Page")) 
print test1 # Returns "Page title"

# findAll test
test2 = soup1.findAll('title',text=re.compile("Page")) 
print test2 # Returns "[<title>Page title</title>, <title>Author name</title>]"

在第二个测试中,解析器不应该返回与第一个示例中相同的结果吗? 第二个测试应该返回所有'title'标签,其文本包含“Page”,但它也会返回第二个标题标签。

这是预期还是我错过了什么?

3 个答案:

答案 0 :(得分:0)

The documentation似乎暗示textname参数是互斥的。但是,它说,如果指定textname将被忽略,在您的情况下,它似乎正好相反。

答案 1 :(得分:0)

它在BeautifulSoup 3.2.0上按预期工作:

>>> soup.find('title',text=re.compile("Page")) 
u'Page title'
>>> soup.findAll('title',text=re.compile("Page")) 
[u'Page title']

答案 2 :(得分:-1)

我在python3.7中获得了BeautifulSoup 4.7版的结果

>>> soup.find('title', text=re.compile('Page'))
    <title>Page title</title>
>>> soup.findAll('title', text=re.compile('Page'))
   [<title>Page title</title>]