2010-04-05 56 views
5

例如,如果我用元素的屬性,像ID搜索:使用BeautifulSoup的findAll來搜索html元素的innerText以獲得與搜索屬性相同的結果?

soup.findAll('span',{'id':re.compile("^score_")}) 

我回來匹配整個跨度元素(我喜歡)的列表。

但如果我嘗試用的innerText這樣的HTML元素的搜索:

soup.findAll('a',text = re.compile("discuss|comment")) 

我回來只是元素的innerText部分回匹配,而不是整個元素與標籤和屬性像我會在上面。

這是可能的做出去找到匹配,然後得到它的父母?

謝謝。

回答

6

您不回覆文本。你會得到一個NavigableString的文字。這對象有方法去父母等

from BeautifulSoup import BeautifulSoup 
import re 

soup = BeautifulSoup('<html><p>foo</p></html>') 

r = soup.findAll('p', text=re.compile('foo')) 

print r[0].parent 

打印

<p>foo</p> 
+0

超級感謝。基本上得到我想要的結果,就像這樣: comments = map(lambda x:x.parent,soup.findAll('a',text = re.compile(「。discuss | comment。 「))) – Jack 2010-04-05 19:21:56

+0

maplambda是醜陋的,所以我只是''s.parent for s.in soup.findAll(...)]' – nosklo 2010-04-05 19:36:19

+0

@Jack:也值得檢查的是'lxml.html' - 我是因爲後者不再被維護並且速度較慢,所以寧願將它放在'BeautifulSoup'上面。 – nosklo 2010-04-08 11:39:12