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

如何使用Python爬取包含图片的div,同时提取其中的文本与图片资源

解决方案

.text属性的本质是提取当前节点及所有子节点的纯文本内容,会自动过滤掉所有HTML标签,因此无法直接拿到图片资源。你可以通过遍历目标div下的所有节点,分别处理文本和图片标签的方式实现同时提取:

实现示例(Python + BeautifulSoup4)

这是爬虫场景最常用的实现方案,代码如下:

from bs4 import BeautifulSoup, NavigableString

# 替换为你实际拿到的页面HTML内容
html = """
<div class="main">
     <span class="something">TEXT1</span>
     <span class="something">TEXT2</span>
     <span class="something">TEXT3</span>
     <span class="something"><img src="示例图片1链接" alt="图片1说明"></span>
     <span class="something">TEXT4</span>
     <span class="something">TEXT5</span>
     <span class="something"><img src="示例图片2链接" alt="图片2说明"></span>
     <span class="something">TEXT6</span>
</div>
"""
soup = BeautifulSoup(html, 'lxml')
# 定位class为main的目标div
main_div = soup.find('div', class_='main')

# 分别存储提取到的文本和图片
result = {
    "all_text": [],
    "all_images": []
}

def parse_node(node):
    # 处理文本节点
    if isinstance(node, NavigableString):
        text_content = node.strip()
        if text_content:
            result["all_text"].append(text_content)
        return
    # 处理图片标签,提取资源链接
    if node.name == 'img':
        img_info = {
            "src": node.get("src", ""),
            "alt": node.get("alt", "")
        }
        result["all_images"].append(img_info)
        return
    # 其他标签递归遍历子节点
    for child in node.children:
        parse_node(child)

parse_node(main_div)

# 输出结果
print("提取到的所有文本:", result["all_text"])
print("提取到的所有图片资源:", result["all_images"])

如果你需要保留原DOM顺序混合存储文本和图片,可以修改存储逻辑:

# 按DOM先后顺序混合存储
mixed_result = []
def parse_node_ordered(node):
    if isinstance(node, NavigableString):
        text_content = node.strip()
        if text_content:
            mixed_result.append({
                "type": "text",
                "content": text_content
            })
        return
    if node.name == 'img':
        mixed_result.append({
            "type": "image",
            "src": node.get("src", ""),
            "alt": node.get("alt", "")
        })
        return
    for child in node.children:
        parse_node_ordered(child)

parse_node_ordered(main_div)
print("按原顺序混合存储结果:", mixed_result)

其他工具的通用思路

如果你使用PyQuery、Selenium、Playwright等其他工具,核心逻辑一致:

  • 先定位到目标div节点
  • 遍历所有子节点,区分文本节点和元素节点
  • 遇到img标签时提取src属性,其他情况提取文本内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:39:05