如何用Python BeautifulSoup获取嵌套div>p>span元素的内容
解决方法
你的代码主要存在三个问题:没有精准定位目标容器、打印的是标签对象而非文本内容、未处理文本中的多余空白。以下是优化后的实现方案:
方案一:层级定位法
import requests from bs4 import BeautifulSoup req = requests.get(url, headers) soup = BeautifulSoup(req.content, 'html.parser') # 直接定位到目标div(id为output),避免遍历所有无关div target_div = soup.find("div", id="output") if target_div: # 遍历该div下的所有p标签 for p_tag in target_div.find_all("p"): # 查找当前p标签内的span span_tag = p_tag.find("span") if span_tag: # 提取文本并去除前后空白 target_content = span_tag.get_text(strip=True) print(target_content)
方案二:CSS选择器法(更简洁)
import requests from bs4 import BeautifulSoup req = requests.get(url, headers) soup = BeautifulSoup(req.content, 'html.parser') # 用CSS选择器直接定位到目标层级的span标签 target_spans = soup.select("div#output p span") for span in target_spans: print(span.get_text(strip=True))
核心优化点:
- 精准定位:通过
id="output"直接锁定目标div,避免处理页面中其他无关的div元素 - 文本提取:使用
get_text(strip=True)获取标签内的纯文本,并自动去除换行、空格等无效空白 - 简化逻辑:CSS选择器可以一步到位定位到目标元素,减少多层循环嵌套
内容的提问来源于stack exchange,提问作者Kyle Daniels
相关产品推荐
相关产品推荐

