2016-07-31 15 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" /> 

oben das ist mein Teil meiner Suppe, und ich möchte Inhalt zwischen bekommen die zwei <hr>, weil hr ist kein close-tag, also konnte ich nicht eine einfache methode verwenden, ich habe gedacht, wenn ich find_next_elements verwenden kann, aber wie kann er aufhören, wenn er <hr class = 'calibre2'> sehen, so kann ich diese inhalte bekommen, Danke.Wie BeautifulSoup nutzen, um Inhalte zwischen <hr class = 'calibre2> ... <hr class = „calibre2“ />

Antwort

1

Sie können alle hr Elemente durchlaufen und .find_next_siblings() verwenden, um über die nächsten gleichgeordneten Elemente zu iterieren. Dann, wenn Sie hr treffen, brechen die Schleife:

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

Wie kann ich ausdrücken Sie geben mir die große Hilfe, Ich benutze einen ganzen Morgen, will das Problem beheben, du hast mich überlebt. Ich danke dir sehr. –

+0

@yiwang können Sie [die Antwort akzeptieren] (http://stackoverflow.com/help/someone-answers), aber ich bin froh, unabhängig davon zu helfen. Vielen Dank. – alecxe

+0

Hallo, ich möchte wissen, wie man reinen Text zwischen


bekommt, weil hr kein close-Tag ist, also konnte ich tag.txt nicht direkt verwenden, also benutze try und except method , im Versuch, wenn ist Tag ich benutze tag.txt und außer wenn es eine Zeichenfolge ist, füge ich nur in eine Zeichenfolge, aber wenn ich das Ergebnis nicht gut, einige Inhalte verlieren, und Tag immer noch da, so können Sie sagen ich, wie man mit dem Tag nicht umgehen kann, schließen und ich will reine Textprobleme bekommen. Danke. –

0

können Sie prüfen, für die hr und calibre2 Klasse in Verbindung mit 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

Vielen Dank für sagen Sie mir, aber in meinen Fenstern konnte ich nicht beautifulsoup (..., 'lxml'), sie sagen mir, um Baum zu installieren. Aber wenn ich xml installieren möchte, konnte ich die pip-Methode nicht verwenden. Aber ich werde versuchen, Ihren Code zu lernen. –

+0

Hallo, ich möchte wissen, ob Sie eine Methode haben, um reinen Text zwischen den zwei hr-Tags zu erhalten, weil das tr-Tag kein close-Tag ist, so dass ich den reinen Text nicht direkt erhalten konnte. Auch ich versuche, versuchen und außer Methode wollen, um reinen Text zu erhalten, ist das Ergebnis nicht gut. Hast du irgendeine Methode, um ein Close-Tag außerhalb der offenen


hinzuzufügen, so könnte ich direkt verwenden tag.txt meine Wünsche Dinge, danke. –