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

使用BeautifulSoup提取非层级结构的连续HTML元素

提取无结构巨型div中的重复模式内容

这种没有层级结构的巨型div确实挺让人头疼的,但我们可以通过手动遍历DOM节点、匹配目标序列的方式来提取你要的h4 p ul (strong ul)模式实例。下面是具体的实现思路和代码:

核心思路

  • 先定位到那个巨型div,过滤掉其中的文本、注释等非元素节点,只保留我们需要的标签节点
  • 遍历节点列表,以h4作为模式的起点,依次匹配后续的p、ul,再处理可重复出现的strong + ul组合
  • 每匹配到一个完整的模式实例,就把它整理成结构化的数据保存下来

JavaScript实现代码

// 获取目标巨型div(如果有特定类名/ID可以替换成更精准的选择器)
const giantDiv = document.querySelector('div');
// 过滤出所有元素节点,排除文本、注释等干扰节点
const elementNodes = Array.from(giantDiv.childNodes).filter(node => node.nodeType === Node.ELEMENT_NODE);
// 存储提取到的所有模式实例
const extractedGroups = [];
let currentIndex = 0;

while (currentIndex < elementNodes.length) {
  const currentNode = elementNodes[currentIndex];
  
  // 找到h4作为模式的起始点
  if (currentNode.tagName === 'H4') {
    const group = {
      h4Content: currentNode.textContent.trim(),
      pContent: '',
      mainUlItems: [],
      strongUlPairs: []
    };
    currentIndex++;
    
    // 匹配紧跟的p标签
    if (currentIndex < elementNodes.length && elementNodes[currentIndex].tagName === 'P') {
      group.pContent = elementNodes[currentIndex].textContent.trim();
      currentIndex++;
      
      // 匹配紧跟的ul标签
      if (currentIndex < elementNodes.length && elementNodes[currentIndex].tagName === 'UL') {
        // 提取ul下的所有li文本
        group.mainUlItems = Array.from(elementNodes[currentIndex].querySelectorAll('li'))
          .map(li => li.textContent.trim());
        currentIndex++;
        
        // 循环匹配重复出现的strong + ul组合
        while (currentIndex < elementNodes.length && elementNodes[currentIndex].tagName === 'STRONG') {
          const strongText = elementNodes[currentIndex].textContent.trim();
          currentIndex++;
          
          // 确保strong后面紧跟ul
          if (currentIndex < elementNodes.length && elementNodes[currentIndex].tagName === 'UL') {
            const ulItems = Array.from(elementNodes[currentIndex].querySelectorAll('li'))
              .map(li => li.textContent.trim());
            group.strongUlPairs.push({ strong: strongText, ulItems });
            currentIndex++;
          } else {
            // 如果strong后没有ul,终止当前组合的匹配
            break;
          }
        }
        
        // 将完整匹配的模式实例加入结果数组
        extractedGroups.push(group);
        continue;
      }
    }
  }
  
  // 如果当前节点不是h4,或者模式匹配中断,继续遍历下一个节点
  currentIndex++;
}

// 输出提取结果,你可以根据需求进一步处理这些数据
console.log('提取到的模式实例:', extractedGroups);

补充说明

  • 代码中过滤了非元素节点,所以节点间的换行、空格等文本不会干扰匹配
  • 如果你的模式中h4和后续标签之间可能夹杂少量无关元素,可以修改逻辑,比如在寻找下一个目标标签时跳过无关节点(比如增加一个循环跳过非目标标签)
  • 提取后的结果是结构化的数组,每个元素对应一个完整的h4 p ul (strong ul)实例,方便你后续处理或展示

内容的提问来源于stack exchange,提问作者Daniel Paczuski Bak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:19