HTML-Datei nach spezifischem <td class= ...> suchen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey,

ich habe eine riesen HTML-Content.
Nun muss ich diese nach einem ganz spezifischem <td> durchsuchen, dieser sieht wie folgt aus:
<td class=" cb TABLE0 TAB_CHECK_SEL_CSS tr_rowspan1 td5">
<Input class=" ….." type="Checkbox" name="KNZ_SEL00000_X" value ="..."
WICHTIG: ich muss td parsen, da der Name nach jedem refresh der seite eine andere Variable (X) zugewiesen bekommt, bspl:
1. refresh: name="KNZ_SEL00000_4"
2. refresh: name="KNZ_SEL00000_6"
3. refresh: name="KNZ_SEL00000_17"
usw.
daher sollte ich nach der td class = "cb TABLE0 TAB_CHECK_SEL_CSS tr_rowspan1 td5" parsen.
Versucht habe ich folgendes:

Code: Alles auswählen

soup.find(td, {'class': 'cb  TABLE0 TAB_CHECK_SEL_CSS tr_rowspan1 td5'})
Ich erhalte leider immer: [ ]
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Versuch mal das 'td' in Anführungszeichen zu setzen.

Code: Alles auswählen

soup.find('td', {'class': 'cb  TABLE0 TAB_CHECK_SEL_CSS tr_rowspan1 td5'})
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

hab es eben mal wie folgt probiert:

Code: Alles auswählen

table = soup.find(class_="cb TABLE0 TAB_CECK....") 
ich erhalte nun das gewünschte Ergebnis:
<td class="cb TABLE0 TAB_CHECK">
<Input class="cb TABLE0" id="KNZ_SEL00000_1" Name="KNZ_SEL00000_1" ...
wie kann ich nun die "id" bzw. den "namen" ausgeben?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hey, ich glaube das geht mit:

Code: Alles auswählen

print(table.get('id'))
Bin mir aber nicht sicher und kann es leider nicht testen, da ich nicht deine Daten habe..
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Hey, danke für die schnelle Antwort, leider habe ich folgende Probleme damit:

1. bei mir wird das ".get" nicht mal vorgeschlagen in meinem Editor
2. ich Erhalte als Ausgabe "None"
OozeWithUzi
User
Beiträge: 9
Registriert: Montag 8. Juli 2019, 13:40

Ist da überhaupt ein Attribut mit dem Namen "id" drin? Das kommt aus deinem Beispiel nämlich nicht vor.
Tags können wie Dictionarys abgefragt werden, von daher sollte das get() dort greifen.

Alternativ kannst du auch:

Code: Alles auswählen

print(table['id'])
schreiben.

Mit

Code: Alles auswählen

print(table.attrs)
siehst du genau, was er da alles an Attributen im Tag findet.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Bei mir klappt es so:

Code: Alles auswählen

soup = BeautifulSoup('<Input class="cb TABLE0" id="KNZ_SEL00000_1" Name="KNZ_SEL00050_1"></class>')
table = soup.find(class_="cb TABLE0") 
print(f"ID =     {table.get('id')}")
print(f"Name =   {table.get('name')}")
OozeWithUzi
User
Beiträge: 9
Registriert: Montag 8. Juli 2019, 13:40

OozeWithUzi hat geschrieben: Mittwoch 17. Juli 2019, 07:58 Ist da überhaupt ein Attribut mit dem Namen "id" drin? Das kommt aus deinem Beispiel nämlich nicht vor.
Kein Kaffee und früh am morgen bedingt Blindheit scheinbar :roll:
Benutzeravatar
snafu
User
Beiträge: 6854
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da ist ja offenbar auch die ID vom input-Element gemeint. Demnach also:

Code: Alles auswählen

soup.find(...).input['id']
Kirikkayis
User
Beiträge: 85
Registriert: Freitag 18. Januar 2019, 08:02

Jap, vielen Dank für die unterstützenden Ideen.
Habe es jetzt wie folgt:

Code: Alles auswählen

soup = BeautifulSoup(file, 'lxml')

table = soup.find(class_"cb TABLE TAB_CHECK_SEL tr_rowspan1 td2")

table1 = table.find('input', attrs={'type':'checkbox'})['id']
print(table1)
Benutzeravatar
__blackjack__
User
Beiträge: 14018
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das kompiliert aber nicht, wegen Syntaxfehler. Und `table1` ist an sich schon ein schlechter Name, aber inhaltlich passt der mal so gar nicht zu dem Wert eines `id`-Attributs von einem <input>-Element.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten