Wie ein verschachteltes Element in schöner Suppe bekommen
-
21-08-2019 - |
Frage
ich mit der Syntax habe Schwierigkeiten erforderlich, um einige hrefs in einem td zu greifen. Die Tabelle, tr und td-Elemente nicht irgendwelche oder IDs der Klasse haben.
Wenn ich den Anker in diesem Beispiel greifen wollte, was brauche ich?
Danke
Lösung
Wie pro die docs, müssen Sie zunächst einen Parse-Baum machen:
import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)
und Sie in ihm dann suchen, zum Beispiel für <a>
-Tags, deren unmittelbar übergeordnete ist ein <td>
:
for ana in soup.findAll('a'):
if ana.parent.name == 'td':
print ana["href"]
Andere Tipps
So etwas wie das?
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Das sollte den ersten „a“ innerhalb jeden „td“ in dem HTML-Code Sie bieten finden. Sie können td.find
zwicken spezifischere oder sonst findAll
verwenden, wenn Sie in jedem td mehrere Links haben.
UPDATE: re Daniele Kommentar, wenn Sie sicherstellen möchten, Sie haben noch keine None
die in der Liste, dann könnte man die Liste Verständnis ändern also:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]
, die im Grunde fügt nur einen Scheck, um zu sehen, ob Sie ein tatsächliches Element von td.find('a')
zurückgegeben haben.