我正在使用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.位)。
答案 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.
。