You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用BeautifulSoup如何提取标签直接文本并排除子标签内容

解决思路

你需要提取div.companyLocation的直接子文本节点,而非所有嵌套标签的拼接文本,跳过内部的span、a等标签内容即可。

具体实现代码

import requests
from bs4 import BeautifulSoup
# 导入NavigableString用于判断节点类型
from bs4.element import NavigableString

url = "https://www.indeed.com/jobs?q=python&limit=50"

extracts_url = requests.get(url)
extracts_soup = BeautifulSoup(extracts_url.text, 'html.parser')
soup_jobs = extracts_soup.find_all("div", {"class": "job_seen_beacon"})

for soup_job in soup_jobs:
    for loc_div in soup_job.select("div.companyLocation"):
        location = ""
        # 遍历div的直接子节点
        for child in loc_div.contents:
            # 找到第一个非空的直接文本节点就跳出
            if isinstance(child, NavigableString):
                stripped = child.strip()
                if stripped:
                    location = stripped
                    break
        print(location)

原理解释

  • Tag.contents会返回当前标签的直接子节点列表,包含文本节点和子标签节点
  • 我们只筛选类型为NavigableString的节点(也就是直接写在标签下、没有被其他标签包裹的文本),跳过所有子标签
  • 对拿到的文本做去空白处理,过滤掉换行、空格等无意义内容,第一个非空的就是你要的初始位置字符串

内容的提问来源于stack exchange,提问作者Zerwing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:27:03