首页 文章

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

提问于
浏览
2

我正在尝试使用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>]"

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

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

3 回答

  • 0

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

  • 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)
    

相关问题