2009-10-15 133 views
2

我正在閱讀BeautifulSoup來屏幕上刮一些相當沉重的HTML頁面。通過BeautifulSoup的文檔,我似乎無法找到一種簡單的方法來選擇子元素。用BeautifulSoup選擇特定的子元素

由於HTML:

<div id="top"> 
    <div>Content</div> 
    <div> 
    <div>Content I Want</div> 
    </div> 
</div> 

我希望有一個簡單的方法來獲得「內容我想要」給我對象頂部。來到BeautifulSoup我認爲這很容易,並且像topobj.nodes [1] .nodes [0] .string。相反,我只能看到變量和函數,這些變量和函數還會將元素與文本節點,註釋等一起返回。

我錯過了什麼嗎?或者我真的需要使用.find()更長的形式,或者更糟糕的是使用.contents變量的列表編譯器。

原因是我不相信網頁的空白是相同的,所以我想忽略它,只能遍歷元素。

回答

2

你跟find更加靈活,並得到你想要的,你只需要運行:

node = p.find('div', text="Content I Want") 

但是,因爲它可能不是如何要到那裏,下列選項可能適合你更好:

xml = """<div id="top"><div>Content</div><div><div>Content I Want</div></div></div>""" 
from BeautifulSoup import BeautifulSoup 
p = BeautifulSoup(xml) 

# returns a list of texts 
print p.div.div.findNextSibling().div.contents 
# returns a list of texts 
print p.div.div.findNextSibling().div(text=True) 
# join (and strip) the values 
print ''.join(s.strip() for s in p.div.div.findNextSibling().div(text=True))