2016-07-31 94 views
1
<hr class="calibre2" /> 
<h3 class="calibre5">-ability</h3> (in nouns 構成名詞) : <br class="calibre4" /> 
<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ capability 能力 </span></p></blockquote> 

<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ responsibility 責任 </span></p></blockquote> 

<hr class="calibre2" /> 
<h3 class="calibre5">-ibility</h3> (in nouns 構成名詞) : <br class="calibre4" /> 
<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ capability 能力 </span></p></blockquote> 

<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ responsibility 責任 </span></p></blockquote> 

<hr class="calibre2" /> 

上面這是我的湯的一部分,我想獲得內容兩個<hr>,因爲hr不是關閉標籤,所以我不能使用一些簡單的方法,我想如果我可以使用find_next_elements,但是如何讓他停下來,當他看到<hr class = 'calibre2'>時,我可以得到那些內容,謝謝。如何使用BeautifulSoup獲得<hr class ='calibre2'> ... <hr class =「calibre2」>

回答

1

您可以遍歷所有hr元素並使用.find_next_siblings()遍歷下一個兄弟元素。然後,如果你遇到hr,打破循環:

for hr in soup.find_all("hr", class_="calibre2"): 
    for item in hr.find_next_siblings(): 
     if item.name == "hr": 
      break 

     print(item) 
    print("-----") 
+0

我怎樣才能表達你給我很大的幫助,我用了一整個早上,想解決這個問題,你活了下來。非常感謝。 –

+0

@yiwang你可以[接受答案](http://stackoverflow.com/help/someone-answers),但我很樂意提供幫助。謝謝。 – alecxe

+0

您好,我想知道如何在


之間獲得純文本,因爲hr不是一個關閉標記,所以我不能直接使用tag.txt,所以我使用try和except方法,在嘗試何時是標記我使用tag.txt,除非是一個字符串,我只是添加到一個字符串,但是當我得到的結果不好,一些內容丟失,並且標記仍然在那裏,所以你能告訴我如何處理沒有標籤關閉,我想獲得純文本問題。謝謝。 –

0

您可以結合檢查人力資源和calibre2類find_all_next https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all-next-and-find-next

from bs4 import BeautifulSoup 

testStr = """ 
<hr class="calibre2" /> 
<h3 class="calibre5">-ability</h3> (in nouns 構成名詞) : <br class="calibre4" /> 
<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ capability 能力 </span></p></blockquote> 

<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ responsibility 責任 </span></p></blockquote> 

<hr class="calibre2" /> 
<h3 class="calibre5">-ibility</h3> (in nouns 構成名詞) : <br class="calibre4" /> 
<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ capability 能力 </span></p></blockquote> 

<blockquote class="calibre6"><p class="calibre_1"><span class="italic">◊ responsibility 責任 </span></p></blockquote> 

<hr class="calibre2" /> 
"""; 
soup = BeautifulSoup(testStr, 'lxml') 
hrTag = soup.hr 

nextTags = hrTag.find_all_next() 

content = [] 

for item in nextTags: 
    # check if we have reached the second calibre2 hr 
    print("Name %s ; Class %s" % (item.name, item['class'][0])) 
    if item.name == 'hr' and item['class'][0] == 'calibre2': 
     break 
    content.append(item) 
print(content) 
+0

謝謝你告訴我,但在我的窗戶中,我無法使用美麗(...,'lxml'),他們告訴我要安裝樹。但是當我想安裝xml時,我無法使用pip方法。但我會嘗試學習你的代碼。 –

+0

您好,我想知道您是否有方法在兩個hr標籤之間獲取純文本,因爲tr標籤不是關閉標籤,所以我無法直接在其中獲取純文本。即使我嘗試使用嘗試和除了方法想要獲得純文本,結果並不好。你有沒有什麼方法在open


之外添加一個關閉標籤,所以我可以直接使用tag.txt獲取我想要的東西,謝謝。 –