Beautifulsoup对于python中的html解析很方便,而下面的代码结果就是cofuse me。
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"]
结果:
[u'passed']
row1
[u'failed']
row2
为什么属性class
作为数组返回?虽然id
是正常值吗?
beautifulsoup4-4.5.0
与python 2.7
答案 0 :(得分:2)
因为元素可能有多个类。
考虑这个例子:
来自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
答案 1 :(得分:1)
class
是settings.py
中的特殊multi-valued attribute:
HTML 4定义了一些可以包含多个值的属性。 HTML 5 删除了其中的几个,但定义了一些。最普遍的 多值属性是
BeautifulSoup
(也就是说,标签可以有多个 CSS类)
有时,这是有问题的 - 例如,当您想要将正则表达式作为整体应用于class
属性值时:
你可以turn this behavior off by tweaking the tree builder,但我不建议这样做。