Python 提取另一个 span 标签内 span 标签后面的文本

Python extracts texts following a span tag inside another span tag

提问人:bilbao 提问时间:3/7/2023 更新时间:3/7/2023 访问量:76

问:

有没有办法从span标签中提取“兼职,全职”和“在校”?

<span class="SecondaryFacts DesktopOnlyBlock" data-v-3c87c7ca="">Master <span class="Divider" data-v-3c87c7ca="">/</span> Part-time, Full-time <span class="Divider" data-v-3c87c7ca="">/</span> On Campus</span>

我将能够找到 span 标签,但得到文本“/”。有没有办法在内部跨度关闭后获取文本?class="Divider"

python dom xpath beautifulsoup 元素树

评论

3赞 ProfDFrancis 3/7/2023
显示您到目前为止尝试过的内容,以及它给出的确切输出,以及您希望它提供的内容。

答:

0赞 Conal Tuohy 3/7/2023 #1

示例中的 XML 具有一个根元素,该元素是包含以下子节点的元素:span

  • 文本节点Master
  • 一个元素span
  • 文本节点Part-time, Full-time
  • 另一个元素span
  • 文本节点 On Campus

您说要提取文本节点和 ?据推测,您需要一个可以应用于其他类似 XML 数据的 XPath,并且有不同的条件可以返回相同的两个文本节点。因此,我将猜测您的标准是您要提取任何文本节点,该节点前面有一个属性为 的同级元素。相应的 XPath 为:Part-time, Full-time On CampusspanclassDivider

/span/text()[preceding-sibling::span/@class='Divider']

也就是说,我怀疑 XPath 接口可能不适合您,因为它不支持返回文本节点的 XPath 查询,只支持元素(无论如何,这就是我的理解;我不是 Python 程序员)。但是,我知道 XPath API 返回文本节点,例如 https://lxml.de/tutorial.html#using-xpath-to-find-textElementTreelxml.etree

0赞 user510170 3/7/2023 #2

这是将返回所需内容的代码。您要查找的值不属于“span”标签,您可以使用搜索 find('body') 或 find_all() 并引用找到的第一个元素。

from bs4 import BeautifulSoup


html = '<span class="SecondaryFacts DesktopOnlyBlock" data-v-3c87c7ca="">Master <span class="Divider" data-v-3c87c7ca="">/</span> Part-time, Full-time <span class="Divider" data-v-3c87c7ca="">/</span> On Campus</span>'
soup = BeautifulSoup(html, "lxml")
# body = soup.find('body')
body = soup.find_all()[0]
print(body.text.split("/")[1:])

我们将获得一个列表,您可以根据需要进行处理:

[' Part-time, Full-time ', ' On Campus']