我正在使用 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. 位)。
最佳答案
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.
正如人们所期望的那样。
关于python - 无法按位置或属性匹配时在 BeautifulSoup 中提取标签值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422770/