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

如何使用BeautifulSoup获取两个div或a标签之间的数据

提取两个标签之间内容的解决方案

方法一:使用Python的BeautifulSoup

BeautifulSoup适合处理结构化HTML,核心思路是找到起始标签后,遍历它的后续兄弟节点,直到碰到结束标签,收集这些节点的内容。

针对你的示例,代码实现如下:

from bs4 import BeautifulSoup

html_content = """
<div id="startID"></div>
<table>
    <tr>
        data
    </tr>
</table>

<p>Paragraph data</p>
<div id="endID"></div>
"""

soup = BeautifulSoup(html_content, 'html.parser')
start_tag = soup.find('div', id='startID')
end_tag = soup.find('div', id='endID')

# 收集两个标签间的有效内容
result = []
current_node = start_tag.next_sibling
while current_node != end_tag:
    if current_node.strip():  # 过滤空白换行节点
        result.append(str(current_node))
    current_node = current_node.next_sibling

final_content = ''.join(result)
print(final_content)

运行后会输出你需要的预期结果,自动跳过无效的空白节点。

方法二:使用XPath(适配Scrapy/lxml)

如果用XPath做结构化查询,可以直接定位起始标签之后、结束标签之前的所有节点:

用lxml的示例代码:

from lxml import etree

html_content = """
<div id="startID"></div>
<table>
    <tr>
        data
    </tr>
</table>

<p>Paragraph data</p>
<div id="endID"></div>
"""

tree = etree.HTML(html_content)
# XPath表达式:筛选startID之后、endID之前的所有节点
nodes = tree.xpath('//div[@id="startID"]/following-sibling::*[preceding-sibling::div[@id="endID"]]')

# 拼接节点内容
final_content = '\n'.join([etree.tostring(node, encoding='unicode') for node in nodes])
print(final_content)

这个XPath逻辑精准匹配你要的范围,换成<a>标签只需修改标签名和属性即可,逻辑通用。

关键提醒

  • 尽量别用正则表达式处理HTML,HTML结构可能存在嵌套、换行变化,正则极易匹配出错,优先用结构化解析工具。
  • 若起始/结束标签是<a>,只需替换代码中对应的标签名和定位属性,核心逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:20:46