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

如何使用Html Agility Pack获取嵌套img标签的src属性值?

解决Html Agility Pack提取嵌套img标签src属性的问题

嘿,我懂你现在的困扰——用Html Agility Pack抓嵌套img的src试了好几次都没成功,还要抓17个,确实让人头疼。咱们先从你给的简化HTML入手,一步步搞定这个问题!

先分析你的HTML结构

首先注意到你提供的HTML里有个小语法问题:<a href="#blank_link"> class="img">这里少了class属性的正确定义格式,应该是<a href="#blank_link" class="img">。不过Html Agility Pack的容错性很强,这点小问题通常不会影响解析,但咱们写代码的时候还是要基于正确的结构来定位元素。

两种可靠的提取方法

不管你是从字符串加载HTML,还是从网页抓取,下面两种方法都能帮你拿到所有目标img的src:

方法1:使用XPath定位(精准高效)

XPath可以直接按层级定位到目标img,避免误抓页面其他地方的img:

using HtmlAgilityPack;
using System.Collections.Generic;
using System.Linq;

// 加载你的HTML(这里用字符串示例,实际可以替换为从网页加载)
var htmlContent = @"<div class=""largeTitle""> 
    <article class=""articleItem"" data-id=""0000""> 
        <a href=""#blank_link"" class=""img""> 
            <img class="" lazyloaded"" data-src=""#blank_link"" alt=""test"" onerror=""script"" src=""image_link.jpg""> 
        </a> 
    </article> 
    <article class=""articleItem"" data-id=""0001""> 
        <a href=""#blank_link"" class=""img""> 
            <img class="" lazyloaded"" data-src=""#blank_link"" alt=""test"" onerror=""script"" src=""image_link.jpg""> 
        </a> 
    </article> 
</div>";

var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);

// 用XPath筛选出largeTitle下所有articleItem里的img的src属性
var imageSrcList = doc.DocumentNode
    .SelectNodes("//div[@class='largeTitle']//article[@class='articleItem']//img/@src")
    ?.Select(node => node.Value)
    .ToList() ?? new List<string>();

// 遍历输出所有src
foreach (var src in imageSrcList)
{
    Console.WriteLine($"提取到的图片链接:{src}");
}

方法2:用LINQ遍历(更灵活)

如果你更习惯LINQ的写法,也可以通过节点遍历的方式获取:

// 同样先加载HTML文档
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);

// 遍历所有articleItem节点,再提取里面的img的src
var imageSrcList = doc.DocumentNode
    .Descendants("article")
    .Where(article => article.GetAttributeValue("class", "") == "articleItem")
    .SelectMany(article => article.Descendants("img"))
    .Select(img => img.GetAttributeValue("src", "默认值(可选)"))
    .ToList();

避坑提示

  1. class属性的空格问题:你的img标签class是" lazyloaded"(前面有空格),如果用精确匹配@class='lazyloaded'会找不到,所以可以改用contains(@class, 'lazyloaded')来适配这种情况,比如XPath写成//img[contains(@class, 'lazyloaded')]/@src。
  2. 空值判断:SelectNodes可能返回null,所以一定要加空值判断(比如用??或者if),避免空引用异常。
  3. 确保加载完整HTML:如果是从网页抓取,要确认已经获取到完整的HTML内容(有些页面是动态加载的,Html Agility Pack只能处理静态HTML,动态内容需要用Selenium等工具)。

这样处理后,就能轻松提取到17个嵌套img的src属性啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:18:14