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

如何用BeautifulSoup获取多层<div>内容及嵌套<div>中的时间数据?

嘿,我来帮你搞定这两个BeautifulSoup的问题,顺便揪出你代码失效的原因~

问题1:如何获取多层
标签后的内容

首先得明确“多层div”的结构——是嵌套的层级关系,还是同级的多层?不管哪种,核心是用对CSS选择器或者BeautifulSoup的查找方法:

  • 如果是嵌套多层的div(比如<div class="level1"><div class="level2"><div class="level3">目标内容</div></div></div>):
    • 用CSS层级选择器:soup.select_one(".level1 .level2 .level3").text(空格表示后代元素,不管嵌套多少层)
    • 或者链式调用find:soup.find("div", class_="level1").find("div", class_="level2").find("div", class_="level3").text
  • 如果是同级的多层div(比如连续几个div在同一父容器下):
    • 用soup.select("div.parent > div")(>表示直接子元素)来获取所有同级子div,再遍历提取内容

你之前代码里的soup.select("div.div")是错误的——这个选择器是找所有class="div"的div标签,但你提供的HTML样本里目标是class='row'的div,这完全不匹配,所以代码没生效!

问题2:如何获取嵌套在两层
中的时间数据(示例:<div><div>6:00.00</div></div>)

这种两层嵌套的结构很简单,有几种高效的方法:

  • 方法1:链式find
    直接逐层查找:
    time_text = soup.find("div").find("div").get_text(strip=True)
    print(time_text)  # 输出:6:00.00
    
  • 方法2:CSS子选择器
    用>指定直接子元素,精准定位:
    time_elem = soup.select_one("div > div")
    if time_elem:
        print(time_elem.get_text(strip=True))
    
  • 方法3:批量获取(如果页面有多个这样的结构)
    如果页面里有多处两层嵌套的时间div,遍历提取:
    time_elements = soup.select("div > div")
    for elem in time_elements:
        text = elem.get_text(strip=True)
        # 可以加个判断,筛选出时间格式的内容
        if ":" in text and "." in text:
            print("找到时间:", text)
    
修正后的完整代码示例

结合你爬取的项目页面,我调整了代码,帮你正确获取内容:

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.energystorageexchange.org/projects/2")
soup = BeautifulSoup(page.content, 'lxml')

# 示例1:获取class="row"的div下的多层内容
rows = soup.select("div.row")
for row in rows:
    # 提取row下所有嵌套div的文本内容
    nested_texts = [div.get_text(strip=True) for div in row.select("div") if div.get_text(strip=True)]
    if nested_texts:
        print("行内容:", " | ".join(nested_texts))

# 示例2:查找页面中两层嵌套的时间数据
time_candidates = soup.select("div > div")
for candidate in time_candidates:
    text = candidate.get_text(strip=True)
    if len(text) >= 5 and ":" in text:  # 简单判断时间格式
        print("匹配到时间:", text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:36