2016-07-25 5 views
1

Ich stoße auf ein Problem, es könnte sehr einfach sein, aber ich habe es nicht auf dem Dokument gesehen.Python BeautifulSoup nur Top-Tag auswählen

Hier ist die Ziel-HTML-Struktur, sehr einfach.

<h3>Top 
    <em>Mid</em> 
    <span>Down</span> 
</h3> 

Ich möchte die „Top“ Text erhalten, die innerhalb des h3 Tag war, und ich schrieb dieses

from bs4 import BeautifulSoup 
html ="<h3>Top <em>Mid </em><span>Down</span></h3>" 
soup = BeautifulSoup(html) 
print soup.select("h3")[0].text 

Aber es wird Top Mid Down zurückkehren, wie ändere ich das?

Antwort

1

Sie können finden bekommen verwenden Einstellung Text = Wahr und rekursiv = Falsch:

In [2]: from bs4 import BeautifulSoup 
    ...: html ="<h3>Top <em>Mid </em><span>Down</span></h3>" 
    ...: soup = BeautifulSoup(html,"html.parser") 
    ...: print(soup.find("h3").find(text=True,recursive=False)) 
    ...: 
Top 

Je nach Format, gibt es viele verschiedene Möglichkeiten:

print(soup.find("h3").contents[0]) 
print(next(soup.find("h3").children)) 
print(soup.find("h3").next) 
+0

Danke, ich werde mehr Details über 'contents' und' children' auschecken –

0

versuchen, etwas wie folgt aus:

from bs4 import BeautifulSoup 
html ="<h3>Top <em>Mid </em><span>Down</span></h3>" 
soup = BeautifulSoup(html) 
print soup.select("h3").findChildren()[0] 

Obwohl ich bin nicht ganz sicher. Überprüfen Sie dies auch - How to find children of nodes using Beautiful Soup

Grundsätzlich müssen Sie die erste childNode jagen.

+0

Es gibt Syntaxfehler in Ihrem Code, aber vielen Dank für Ihre Informationen. –

-1

seine leicht für Sie, wie diese mit einem regex etwas suchen

pageid=re.search('<h3>(.*?)</h3>', curPage, re.DOTALL) 

und die jedem der Daten innerhalb des Tags mit pageid.group(value) Methode

+0

Danke, aber ich dachte, es gäbe einen einfacheren Weg, den Inhalt in BeautifulSoup zu bekommen. –