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
相关产品推荐
相关产品推荐

