2012-03-22 43 views
2

我想使用“text”属性来分析一些嵌入在HTML中使用BeautifulSoup的文本。 与“发现”和“的findAll”,我注意到一些奇怪的事情,不能让我的周围为什么这样的行为头部周围玩...Python BeautifulSoup - 不同的结果找到并找到所有

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>]" 

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

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

回答

0

The documentation似乎表明textname参数是互斥的。但是,它说,如果指定text,则name将被忽略,在您的情况下,它似乎做相反的事情。

+0

我确实看到了这一点;我从来没有遇到过使用find的问题,但也许是文档中的一个错误。 – JasonB 2012-03-22 12:49:08

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'] 
-1

两个功能极为相似,由它们定义BeautifulSoup文档中证明:

find_All(tag, attributes, recursive, text, limit, keywords) 

find(tag, attributes, recursive, text, keywords)