2015-05-09 55 views
1

我想在源代碼中搜索所有'1'並打印'1'的位置例如:<div id="yeahboy">1</div>'1'可以被任何其他字符串替換。我想看看那個字符串周圍的標籤。Python 3 BeautifulSoup4搜索源頁面中的文本

+0

你是指那個'1'*的位置是什麼意思? – har07

+0

@ har07I只是想打印源代碼中所有'1'的位置1可以用任何其他字符串 –

+0

來代替定義「位置」。你的意思是,你想打印容器元素:'

1
'? – har07

回答

1

考慮這個方面例如*:

from bs4 import BeautifulSoup 

html = """<root> 
<div id="yeahboy">1</div> 
<div id="yeahboy">2</div> 
<div id="yeahboy">3</div> 
<div> 
    <span class="nested">1</span> 
</div> 
</root>""" 
soup = BeautifulSoup(html) 

您可以使用find_all()傳遞parameter True以表明你只想元素節點(而非子文本節點),並且parameter text="1"以表明該元素你想必須有文本內容等於「1」 - 或者你想搜索換任何其他文本:

for element1 in soup.find_all(True, text="1"): 
    print(element1) 

輸出:

<div id="yeahboy">1</div> 
<span class="nested">1</span> 

*)對於OP:對於未來的問題,嘗試給出一個上下文,就像上面的上下文示例一樣。這會讓你的問題更具有具體的並且更容易回答 - 因爲人們不需要自己創建環境,這可能與你實際擁有的環境無關。

+0

事情是我不知道它們的位置,我想用腳本來找到它們全部 –

+0

@bob上面的代碼演示瞭如何在沒有先驗知識的情況下通過文本查找元素關於元素的位置。這個例子的任何問題? – har07

+0

它確實有效,但有一個但是。如果文本包含所有字符串,它將起作用。如果我想查看一個字符串的一部分,它不起作用,例如:(這項工作)'從bs4導入請求 導入BeautifulSoup url ='http://www.editionsmosquito.com/exposition.php' r (true,text =「Expositions」): print(element1)'確實這個工作,但是當我這樣做時: '= requests.get(url) '對於soup.find_all中的element1(True,text =「Expo」): print(element1)'即使是包含世博會的博覽會,它也不打印它,你能幫助我嗎? –