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

如何使用BeautifulSoup从HTML中提取指定div分区内容

问题原因

两个查询语句返回空,分别对应写法错误和源文件问题两类:

  • 第一条tags查询逻辑完全错误:findAll的text参数(4.4.0版本后改名为string)作用是匹配标签包裹的可见文本内容,你传入的是div标签的HTML代码,这段代码属于标签声明,不是页面渲染后显示的文本,不可能被匹配到。
  • 第二条Bedeutungen查询的语法逻辑是对的,返回空的核心原因大概率是本地保存的HTML文件不完整:你在浏览器开发者工具里看到的1042行标签,是浏览器执行JS后渲染出的最终DOM结构,如果你右键另存时选了「仅HTML」类型,很多动态加载的内容块不会被保存到本地静态文件里,自然搜不到对应节点。
  • 额外冗余问题:代码里导入的requests、pandas、urllib.request三个库在读取本地文件的场景下完全没用到,属于无效导入。
修复步骤
  1. 先校验本地文件完整性
    运行下面的代码,确认目标节点确实存在于你保存的本地文件中,不要直接以浏览器里看到的行号为准:
    with open("aufmachen.html", "r", encoding="utf8") as f:
        raw_html = f.read()
    print("目标id是否存在:", "bedeutungen" in raw_html)
    
    如果返回False,重新保存页面:等词条页所有内容加载完成后,右键另存时选择「网页,全部」类型,或者直接在开发者工具的元素面板找到id为bedeutungen的div节点,复制其外部HTML单独保存,避免动态内容缺失。
  2. 修正解析代码
    id是HTML全局唯一属性,直接用id参数匹配即可,不需要额外匹配class,也不需要限定在body下查找,修复后的可运行代码如下:
    from bs4 import BeautifulSoup
    
    with open("aufmachen.html", "r", encoding="utf8") as f:
        soup = BeautifulSoup(f, "html.parser")
    
    # 查找唯一的释义板块节点
    bedeutung_section = soup.find("div", id="bedeutungen")
    
    if bedeutung_section:
        # 提取板块下所有释义条目(杜登词典的释义均存放在class为enumeration__item的li标签下)
        bedeutung_items = [entry.get_text(strip=True) for entry in bedeutung_section.select("li.enumeration__item")]
        for idx, item in enumerate(bedeutung_items, 1):
            print(f"释义{idx}:{item}")
    else:
        print("未匹配到释义板块,请检查本地HTML文件完整性")
    
补充说明
  • 新版BeautifulSoup推荐使用蛇形命名的find_all替代旧版本驼峰命名的findAll,查找唯一节点时用find()即可,性能比查找全部节点更高。
  • 不要尝试用text/string参数匹配标签代码,该参数仅对标签内的可见文本生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:27:16