我尝试获取父元素的属性:
<div class="detailMS__incidentRow incidentRow--away odd">
<div class="time-box">45'</div>
<div class="icon-box soccer-ball-own"><span class="icon soccer-ball-own"> </span></div>
<span class=" note-name">(Autogoal)</span><span class="participant-name">
<a href="#" onclick="window.open('/player/reynaldo/CxtEEPzE/'); return false;">Reynaldo</a>
</span>
</div>
span_autogoal = soup.find('span', class_='note-name')
print(span_autogoal)
print(span_autogoal.find_parent('div')['class'])
# print(span_autogoal.find_parent('div').get('class')
输出:
<span class="note-name">(Autogoal)</span>
['detailMS__incidentRow', 'incidentRow--away', 'odd']
我知道我可以做这样的事情:
print(' '.join(span_autogoal.find_parent('div')['class']))
但是我想知道为什么会这样,并且有可能更正确地做到这一点吗?
答案 0 :(得分:2)
以上答案是正确的,但是,如果要获取多属性值作为字符串返回,请尝试在获取父元素之后使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<div id="HTMLdy"></div>
<button id="gen">Generate Anchor Tag</button>
解析器。
xml
控制台上的输出:
from bs4 import BeautifulSoup
data='''<div class="detailMS__incidentRow incidentRow--away odd">
<div class="time-box">45'</div>
<div class="icon-box soccer-ball-own"><span class="icon soccer-ball-own"> </span></div>
<span class=" note-name">(Autogoal)</span><span class="participant-name">
<a href="#" onclick="window.open('/player/reynaldo/CxtEEPzE/'); return false;">Reynaldo</a>
</span>
</div>'''
soup=BeautifulSoup(data,'lxml')
span_autogoal = soup.find('span', class_='note-name')
print(span_autogoal)
parentdiv=span_autogoal.find_parent('div')
data=str(parentdiv)
soup=BeautifulSoup(data,'xml')
print(soup.div['class'])
答案 1 :(得分:1)
根据BeautifulSoup
documentation:
HTML 4定义了一些可以具有多个值的属性。 HTML 5 删除其中的几个,但定义更多。最常见的 多值属性是类(即,标记可以具有多个 CSS类)。其他包括rel,rev,accept-charset,header和 快捷键。 美丽汤展示了多值食品的价值 属性作为列表:
css_soup = BeautifulSoup('<p class="body"></p>') css_soup.p['class']
# ["body"]
css_soup = BeautifulSoup('<p class="body strikeout"></p>')
css_soup.p['class']
# ["body", "strikeout"]
因此,在您的情况下,<div class="detailMS__incidentRow incidentRow--away odd">
中的class
属性是多值。
这就是span_autogoal.find_parent('div')['class']
为您提供list
作为输出的原因。