提问人:bilbao 提问时间:3/7/2023 更新时间:3/7/2023 访问量:76
Python 提取另一个 span 标签内 span 标签后面的文本
Python extracts texts following a span tag inside another span tag
问:
有没有办法从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"
答:
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 Campus
span
class
Divider
/span/text()[preceding-sibling::span/@class='Divider']
也就是说,我怀疑 XPath 接口可能不适合您,因为它不支持返回文本节点的 XPath 查询,只支持元素(无论如何,这就是我的理解;我不是 Python 程序员)。但是,我知道 XPath API 将返回文本节点,例如 https://lxml.de/tutorial.html#using-xpath-to-find-textElementTree
lxml.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']
评论