如何用BeautifulSoup提取指定多个无类名span元素的文本?
提取指定span内容的解决方案
你用find()只拿到detail1是因为这个方法只会返回匹配到的第一个元素,要获取后面的detail2和detail3,可以试试下面几种方法:
- 方法1:获取所有span后切片提取
先拿到<p class="details">下的所有span元素,再通过索引选取第3、4个(索引从0开始,对应位置2和3):
all_spans = data.find("p", class_="details").find_all("span") # 单独提取 detail2 = all_spans[2].text detail3 = all_spans[3].text # 或者直接打包成列表 target_details = [span.text for span in all_spans[2:]]
- 方法2:用CSS选择器精准定位
如果HTML结构固定,可以用CSS选择器直接选中目标位置的span:
# 单独获取每个目标span detail2 = data.select_one("p.details span:nth-child(3)").text detail3 = data.select_one("p.details span:nth-child(4)").text # 一次性获取所有符合条件的span(从第3个开始的所有span) target_spans = data.select("p.details span:nth-child(n+3)") target_details = [span.text for span in target_spans]
- 方法3:基于已知元素的兄弟节点定位
如果后续结构可能变动,但detail2和3始终在带class="number"的span后面,可以先找到这个span,再获取它后面的兄弟元素:
number_span = data.find("span", class_="number") # 获取number span之后的所有兄弟span target_spans = number_span.find_next_siblings("span") target_details = [span.text for span in target_spans]
内容的提问来源于stack exchange,提问作者karks
相关产品推荐
相关产品推荐

