2012-03-22 24 views
2

"text"属性を使用して、BeautifulSoupを使用してHTMLに埋め込まれたテキストを解析しようとしています。 「見つける」と「findAllの」で遊んで、私は奇妙な何かに気づくと...それはこのように動作する理由を中心に第二の試験でPython BeautifulSoup - 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>]" 

を私の頭を取得することはできません、パーサーが返すべきではありません最初の例と同じ結果ですか? 2番目のテストは、テキストに "Page"が含まれているすべての 'title'タグを返す必要がありますが、2番目のtitleタグも返します。

これが予定されているのですか、何か不足していますか?

答えて

0

The documentationは、textname引数が相互に排他的であることを示唆しているようです。しかし、textが指定されている場合、nameは無視されます。あなたのケースでは、それとは逆のことをしているようです。

+0

私はこれを見ました。 findを使っても問題はありませんでしたが、おそらくドキュメントのtypoです。 – JasonB

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のドキュメントでその定義により証明されるように2つの関数は、非常に類似しています

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

find(tag, attributes, recursive, text, keywords) 
関連する問題