2016-09-28 43 views
2

我不知道如何編寫BeautifulSoup,以便它只給我選定標記的文本。我得到更多,比如它的孩子的文字(ren)!使用BeautifulSoup,如何在沒有兒童文字的情況下只從特定選擇器獲取文字?

例如:

from bs4 import BeautifulSoup 
soup = BeautifulSoup('<div id="left"><ul><li>"I want this text"<a href="someurl.com"> I don\'t want this text</a><p>I don\'t want this either</li><li>"Good"<a href="someurl.com"> Not Good</a><p> Not Good either</li></ul></div>', "html5lib") 
x = soup.select('ul > li') 
for i in x: 
    print(i.text) 

輸出:

「我想這段文字:」 我不希望這textI不希望這兩種

「好」 一點也不好不好

所需輸出:

「我想這個文本」

「好」

回答

4

一種選擇是獲得contents list的第一個元素:

for i in x: 
    print(i.contents[0]) 

另 - 找到的第一個文本節點

for i in x: 
    print(i.find(text=True)) 

雙方將打印:

"I want this text" 
"Good" 
+1

的片段一定又一直在等待! –

-1
from bs4 import BeautifulSoup 
from bs4 import NavigableString 
soup = BeautifulSoup('<div id="left"><ul><li>"I want this text"<a href="someurl.com"> I don\'t want this text</a><p>I don\'t want this either</li><li>"Good"<a href="someurl.com"> Not Good</a><p> Not Good either</li></ul></div>', "html5lib") 
x = soup.select('ul > li') 
for i in x: 
    if isinstance(i.next_element, NavigableString):#if li's next child is a string 
     print(i.next_element) 
相關問題