无法按位置或属性匹配时,在BeautifulSoup中提取标记值

时间:2010-08-06 10:09:35

标签: python beautifulsoup

我正在使用BS来抓取一个网页,我有点陷入一个小问题。这是页面上的一小段HTML。

<span style="font-family: arial;"><span style="font-weight: bold;">Artist:</span> M.I.A.<br>
</span>

一旦我拿到汤,我怎样才能找到这个标签并得到艺术家的名字,即M.I.A. 我无法将标记与style属性匹配,因为它在页面中的十几个位置中使用。我甚至不知道span标记的确切位置,因为它会在页面之间更改位置。因此,我无法按位置进行匹配。艺术家名称会更改,但标题范围结构始终相同。

我只想提取艺术家的名字(M.I.A.位)。

1 个答案:

答案 0 :(得分:1)

BeautifulSoup已经死了,因为SGMLParser已被弃用。我建议您使用更好的lxml库 - 它甚至支持xpath !!

from lxml import html

text = '''
<span style="font-family: arial;">
    <span style="font-weight: bold;">Artist:</span>M.I.A.<br>
</span>
'''

doc = html.fromstring(text)
print ''.join(doc.xpath("//span/span[text()='Artist:']/../text()"))

此xpath表达式表示“找到另一个span标记内的span标记并包含文本'Artist:',并获取包含父标记的所有文本” 。它可以正确地打印M.I.A.