假设以下代码:
for data in soup.findAll('div',{'class':'value'}):
print(data)
给出以下输出:
<div class="value">
<p class="name">Michael Jordan</p>
</div>
<div class="value">
<p class="team">Real Madrid</p>
</div>
<div class="value">
<p class="Sport">Ping Pong</p>
</div>
我想创建以下字典:
Person = {'name': 'Michael Jordan', 'team': 'Real Madrid', 'Sport': 'Ping Pong'}
我可以使用data.text
获取文本,但是如何获取class
的文本以命名字典的keys
(Person [key1],Person [key2] ] ...)?
答案 0 :(得分:4)
您可以使用以下内容:
content = '''
<div class="value">
<p class="name">Michael Jordan</p>
</div>
<div class="value">
<p class="team">Real Madrid</p>
</div>
<div class="value">
<p class="Sport">Ping Pong</p>
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(content)
person = {}
for div in soup.findAll('div', {'class': 'value'}):
person[div.find('p').attrs['class'][0]] = div.text.strip()
print(person)
<强>输出强>
{'Sport': u'Ping Pong', 'name': u'Michael Jordan', 'team': u'Real Madrid'}
答案 1 :(得分:2)
你可以这样做:
for data in soup.findAll('div',{'class':'value'}):
person = {}
for item in data.find_all('div'):
attr = item.p.attrs.get("class")[0]
value = item.p.text
person[attr] = value
print person
答案 2 :(得分:1)
使用此代码段
soup = <div class="value">
<p class="Sport other-name-class other">Ping Pong</p>
</div>
p = soup.find('div.value p')
我发现了两种方法,但是相同,可以使用
p.get_attribute_list('class')
或
p.attrs['class']
都返回具有所有类名的数组,例如['Sport', 'other-name-class', 'other']