C#获取HTML文本的第一张图片与截取内容摘要示例代码

 更新时间:2016年10月19日 09:58:00   投稿:daisy  
在日常web开发的时候,经常会遇到需要获取保存的HTML文本中的第一张图片,并且截取内容摘要的效果,例如织梦的后台添加完详细内容后就是自动读取内容摘要,并保存第一张图片为缩略图,那么这篇文章跟大家分享下利用C#如何实现,感兴趣的朋友们下面来一起看看吧。

获取第一张图片

要我们获得到的数据是一段HTML文本、也许这段文本里面有许多图片、需要截取一张作为标题图片、也就是做为主图、这时就可以用到下面这个方法获取到第一张图片。

示例代码

#region 获取第一张图片
/// <summary>
/// 获取HTML文本的图片地址
/// </summary>
/// <param name="content"></param>
/// <returns></returns>/
/// 
public ArrayList getimgurl(string html)
{
  ArrayList resultStr = new ArrayList();
  Regex r = new Regex(@"<IMG[^>] src=s*(?:´(?<src>[^´] )´|""(?<src>[^""] )""|(?<src>[^>s] ))s*[^>]*>", RegexOptions.IgnoreCase);//忽视大小写
  MatchCollection mc = r.Matches(html);

  foreach (Match m in mc)
  {
    resultStr.Add(m.Groups["src"].Value.ToLower());
  }
  if (resultStr.Count > 0)
  {
    return resultStr;
  }
  else
  {
    resultStr.Clear();
    return resultStr;
  }
}
#endregion

注意:上面所返回的是一个ArrayList 集合、包含了文本里面所有的Img的src、这样我们就可以访问到img的src

截取HTML文本

有时候我们得到的数据是一段HTML文本、需要截取HTML文本的一部分作为内容摘要、此时、我们可以运用下面这个方法

示例代码

 #region 新闻内容摘要
/// <summary>
/// 新闻内容摘要
/// </summary>
/// <param name="sString"></param>
/// <param name="nLeng"></param>
/// <returns></returns>
public string GetContentSummary(string content, int length, bool StripHTML)
{
  if (string.IsNullOrEmpty(content) || length == 0)
    return "";
  if (StripHTML)
  {
    Regex re = new Regex("<[^>]*>");
    content = re.Replace(content, "");
    content = content.Replace(" ", "").Replace(" ", "");
    if (content.Length <= length)
      return content;
    else
      return content.Substring(0, length)  "……";
  }
  else
  {
    if (content.Length <= length)
      return content;

    int pos = 0, npos = 0, size = 0;
    bool firststop = false, notr = false, noli = false;
    StringBuilder sb = new StringBuilder();
    while (true)
    {
      if (pos >= content.Length)
        break;
      string cur = content.Substring(pos, 1);
      if (cur == "<")
      {
        string next = content.Substring(pos  1, 3).ToLower();
        if (next.IndexOf("p") == 0 && next.IndexOf("pre") != 0)
        {
          npos = content.IndexOf(">", pos)  1;
        }
        else if (next.IndexOf("/p") == 0 && next.IndexOf("/pr") != 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
            sb.Append("<br/>");
        }
        else if (next.IndexOf("br") == 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
            sb.Append("<br/>");
        }
        else if (next.IndexOf("img") == 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
          {
            sb.Append(content.Substring(pos, npos - pos));
            size = npos - pos  1;
          }
        }
        else if (next.IndexOf("li") == 0 || next.IndexOf("/li") == 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
          {
            sb.Append(content.Substring(pos, npos - pos));
          }
          else
          {
            if (!noli && next.IndexOf("/li") == 0)
            {
              sb.Append(content.Substring(pos, npos - pos));
              noli = true;
            }
          }
        }
        else if (next.IndexOf("tr") == 0 || next.IndexOf("/tr") == 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
          {
            sb.Append(content.Substring(pos, npos - pos));
          }
          else
          {
            if (!notr && next.IndexOf("/tr") == 0)
            {
              sb.Append(content.Substring(pos, npos - pos));
              notr = true;
            }
          }
        }
        else if (next.IndexOf("td") == 0 || next.IndexOf("/td") == 0)
        {
          npos = content.IndexOf(">", pos)  1;
          if (size < length)
          {
            sb.Append(content.Substring(pos, npos - pos));
          }
          else
          {
            if (!notr)
            {
              sb.Append(content.Substring(pos, npos - pos));
            }
          }
        }
        else
        {
          npos = content.IndexOf(">", pos)  1;
          sb.Append(content.Substring(pos, npos - pos));
        }
        if (npos <= pos)
          npos = pos  1;
        pos = npos;
      }
      else
      {
        if (size < length)
        {
          sb.Append(cur);
          size ;
        }
        else
        {
          if (!firststop)
          {
            sb.Append("……");
            firststop = true;
          }
        }
        pos ;
      }

    }
    return sb.ToString();
  }
}
#endregion

总结

以上就是利用C#获取一段HTML文本中的第一张图片和截取内容摘要的全部内容,希望本文的内容对大家学习或者使用C#能有所帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • C#实现WinForm捕获最小化事件的方法

    C#实现WinForm捕获最小化事件的方法

    这篇文章主要介绍了C#实现WinForm捕获最小化事件的方法,需要的朋友可以参考下
    2014-08-08
  • C#调用exe文件的方法详解

    C#调用exe文件的方法详解

    这篇文章主要为大家详细介绍了C#调用exe文件的相关方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-04-04
  • C# 6.0 的知识梳理

    C# 6.0 的知识梳理

    目前最新的版本是C# 7.0,VS的最新版本为Visual Studio 2017 RC,两者都尚未进入正式阶段。C# 6.0虽说出了一段时间,但是似乎有许多人对这一块知识并不了解。本文将对C# 6.0的知识进行梳理,下面跟着小编一起来看下吧
    2016-12-12
  • C# SQlite操作方法小结

    C# SQlite操作方法小结

    这篇文章主要介绍了C# SQlite操作方法,较为详细的讲述了SQLite的下载与C#针对SQLite的连接、创建、与执行SQL语句等操作相关技巧,需要的朋友可以参考下
    2016-07-07
  • C#中+=是什么意思及+=的用法

    C#中+=是什么意思及+=的用法

    这篇文章主要介绍了C#中+=是什么意思及+=的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C# Random类的正确应用方法

    C# Random类的正确应用方法

    这篇文章主要介绍了C# Random类的正确应用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C# 站点IP访问频率限制 针对单个站点的实现方法

    C# 站点IP访问频率限制 针对单个站点的实现方法

    下面小编就为大家带来一篇C# 站点IP访问频率限制 针对单个站点的实现方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 使用C#实现自己封装的Modbus工具类库

    使用C#实现自己封装的Modbus工具类库

    Modbus通讯协议在工控行业的应用是很多的,并且也是上位机开发的基本技能之一,所以本文主要为大家介绍了如何使用C#封装一个Modbus工具类库,需要的可以参考下
    2024-02-02
  • C#单向链表实现非升序插入方法的实例详解

    C#单向链表实现非升序插入方法的实例详解

    单向链表是一种数据结构,其中元素以线性方式连接在一起,每个元素都指向下一个元素,非升序插入意味着元素不是按升序(从小到大)插入链表中,本文给大家介绍了C#单向链表实现非升序插入方法的实例,需要的朋友可以参考下
    2024-03-03
  • C#对NULL的简化赋值的方法总结

    C#对NULL的简化赋值的方法总结

    在C#中,对null赋值意味着将引用类型的变量设置为无引用或者说空引用,当你声明一个引用类型的变量,如果没有给它初始化具体的对象,那么它的值就是null,本文给大家介绍了C#对NULL的简化赋值的方法总结,需要的朋友可以参考下
    2024-11-11

最新评论