如何用Beautiful Soup获取嵌套在唯一类父span中的子span内容
解决方案
问题原因
soup.select()返回的是元素列表,直接调用.text会报错,必须取出列表中的单个元素后再操作。soup.find()不支持完整的CSS选择器语法(比如>子选择器),它需要通过参数单独指定标签和属性来查找元素。
正确写法
方法一:用 select_one() 替代 select()
select_one() 返回匹配到的第一个元素(而非列表),可直接调用文本方法:
s = soup.select_one('span.uniqueParent > span.notUniqueChildClassName') print(s.get_text(strip=True)) # strip=True 可去除文本前后的空白、换行符
也可以用属性选择器的写法:
s = soup.select_one('span[class="uniqueParent"] > span[class="notUniqueChildClassName"]') print(s.get_text(strip=True))
方法二:用 find() 分步查找
先定位父元素,再在父元素下查找子元素:
parent = soup.find('span', class_='uniqueParent') child = parent.find('span', class_='notUniqueChildClassName') print(child.get_text(strip=True))
也可以链式调用简化代码:
s = soup.find('span', class_='uniqueParent').find('span', class_='notUniqueChildClassName') print(s.get_text(strip=True))
容错补充
如果担心页面中可能不存在目标元素导致报错,可以添加判断逻辑:
parent = soup.find('span', class_='uniqueParent') if parent: child = parent.find('span', class_='notUniqueChildClassName') if child: print(child.get_text(strip=True))
内容的提问来源于stack exchange,提问作者STORM
相关产品推荐
相关产品推荐

