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

使用Playwright+BeautifulSoup提取DreamBot JavaDocs类名失败求助

问题描述

我正在编写Python爬虫,采用Playwright和BeautifulSoup解析DreamBot API的JavaDoc页面(示例页面:https://dreambot.org/javadocs/org/dreambot/api/methods/container/impl/bank/Bank.html),目标是提取类/接口/枚举的名称、类型及可选的父类和接口信息。

当前尝试通过<h2>标签或顶部<pre>声明块提取类名,但无论测试哪个页面,结果始终返回"name": "[Unnamed]"。我已经尝试过抓取.header、.contentContainer等区域、标准化空白、使用替代选择器及打印完整HTML,均未解决问题。

现求助两个问题:

  1. 提取DreamBot JavaDocs类名的更可靠方法;
  2. DreamBot的类/接口/枚举页面是否结构一致?

解决方案

1. 更可靠的类名提取方法

查看DreamBot JavaDoc页面的结构,类/接口/枚举的核心信息集中在页面顶部的**.header区域**,可以通过以下两种方式稳定提取:

  • 直接从<h1>标签提取类名(含完整包路径):
    # 假设soup是BeautifulSoup解析后的对象
    full_class_name = soup.select_one('div.header h1').get_text(strip=True)
    # 若只需要单纯类名(去掉包路径),按最后一个点分割即可
    pure_class_name = full_class_name.split('.')[-1]
    
  • 从<pre class="signature">标签提取完整签名信息(包含类型、父类/接口):
    signature_pre = soup.select_one('pre.signature')
    if signature_pre:
        signature_text = signature_pre.get_text(strip=True)
        # 示例签名文本:public class Bank extends Container implements ContainerMethods, ItemContainer
        parts = signature_text.split()
        type_ = parts[1]  # 取值为class/interface/enum
        class_name = parts[2]
        
        # 提取父类和接口
        parent_class = None
        interfaces = []
        extends_pos = signature_text.find('extends')
        implements_pos = signature_text.find('implements')
        
        if extends_pos != -1:
            end_idx = implements_pos if implements_pos != -1 else len(signature_text)
            parent_class = signature_text[extends_pos+7:end_idx].strip()
        if implements_pos != -1:
            interfaces = [i.strip() for i in signature_text[implements_pos+10:].split(',')]
    

另外,用Playwright时要确保页面完全加载后再解析,避免因元素未渲染导致抓取失败:

await page.wait_for_selector('div.header')
html = await page.content()
soup = BeautifulSoup(html, 'html.parser')

2. 页面结构一致性

DreamBot的JavaDoc页面是标准化生成的,类、接口、枚举页面的核心结构完全一致,统一包含:

  • 顶部.header块,内含<h1>类名和<pre>签名区域
  • 下方.contentContainer承载详细文档内容
  • 侧边栏导航结构统一

你可以使用一套选择器处理所有这类页面,无需针对不同类型做特殊适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:22:39