如何使用beautifulsoup分别获取节点文本和子标签

时间:2016-01-01 04:43:55

标签: python beautifulsoup

我的HTML就像:

<a class="title" href="">
    <b>name 
    <span class="c-gray">position</span>
    </b>
</a>

我想分别获取名称和位置字符串。所以我的脚本就像:

lia = soup.find('a',attrs={'class':'title'})
pos = lia.find('span').get_text()
lia.find('span').replace_with('')
name = lia.get_text()
print name.strip()+','+pos

虽然它可以胜任,但我认为这不是一种美好的方式。有更明智的想法吗?

2 个答案:

答案 0 :(得分:3)

您可以这样使用.contents方法:

person = lia.find('b').contents
name = person[0].strip()
position = person[1].text

答案 1 :(得分:1)

想法是找到a元素,然后找到name - 从内部b元素获取第一个文本节点,并为position - 获取span元素的文字:

>>> a = soup.find("a", class_="title")
>>> name, position = a.b.find(text=True).strip(), a.b.span.get_text(strip=True)
>>> name, position
(u'name', u'position')