2016-07-26 8 views
1

Beautifulsoup ist praktisch für HTML-Parsing in Python, und unter Code-Ergebnis cofuse mich.Beautifulsoup Rückkehrliste für Attribut "Klasse", während Wert für andere Attribut

from bs4 import BeautifulSoup 
tr =""" 
<table> 
    <tr class="passed" id="row1"><td>t1</td></tr> 
    <tr class="failed" id="row2"><td>t2</td></tr> 
</table> 
""" 
table = BeautifulSoup(tr,"html.parser") 
for row in table.findAll("tr"): 
    print row["class"] 
    print row["id"] 

Ergebnis:

[u'passed'] 
row1 
[u'failed'] 
row2 

Warum das Attribut class kehrt als Array? während id ist normalwert?

beautifulsoup4-4.5.0 verwendet wird, mit python 2.7

Antwort

1

class ist eine spezielle multi-valued attribute in BeautifulSoup:

HTML 4 einige Attribute definiert, die mehrere Werte haben kann. HTML 5 entfernt ein paar von ihnen, definiert aber ein paar mehr. Die häufigste mehrwertige Attribut ist class (das heißt, kann ein Tag mehr als eine CSS-Klasse haben)

Manchmal dies problematisch ist, zu beschäftigen - zum Beispiel, wenn Sie eine regelmäßige anwenden möchten Ausdruck class Attributwert als Ganzes:

Sie können turn this behavior off by tweaking the tree builder, aber ich würde es nicht tun empfehlen.

1

Weil Elemente mehrere Klassen haben können.

Betrachten Sie dieses Beispiel:

von BS4 Import BeautifulSoup

tr =""" 
<table> 
    <tr class="passed a b c" id="row1"><td>t1</td></tr> 
    <tr class="failed" id="row2"><td>t2</td></tr> 
</table> 
""" 
table = BeautifulSoup(tr,"html.parser") 
for row in table.findAll("tr"): 
    print row["class"] 
    print row["id"] 

['passed', 'a', 'b', 'c'] 
row1 
['failed'] 
row2 
+0

dankt für die schnelle Antwort, mit der akzeptierten Antwort von @alecxe, merke ich, 'CLASS' ist ein spezielles Attribut in HTML und BS4 –

Verwandte Themen