服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#获取HTML文本的第一张图片与截取内容摘要示例代码

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

2021-12-08 13:07C#教程网 C#

在日常web开发的时候,经常会遇到需要获取保存的HTML文本中的第一张图片,并且截取内容摘要的效果,例如织梦的后台添加完详细内容后就是自动读取内容摘要,并保存第一张图片为缩略图,那么这篇文章跟大家分享下利用C#如何

获取第一张图片

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

示例代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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文本的一部分作为内容摘要、此时、我们可以运用下面这个方法

示例代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#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#C#直线的最小二乘法线性回归运算实例

    C#直线的最小二乘法线性回归运算实例

    这篇文章主要介绍了C#直线的最小二乘法线性回归运算方法,实例分析了给定一组点,用最小二乘法进行线性回归运算的实现技巧,具有一定参考借鉴价值,需要...

    北风其凉8912021-10-18
  • C#聊一聊C#接口问题 新手速来围观

    聊一聊C#接口问题 新手速来围观

    聊一聊C#接口问题,新手速来围观,一个通俗易懂的例子帮助大家更好的理解C#接口问题,感兴趣的小伙伴们可以参考一下...

    zenkey7072021-12-03
  • C#Unity3D UGUI实现缩放循环拖动卡牌展示效果

    Unity3D UGUI实现缩放循环拖动卡牌展示效果

    这篇文章主要为大家详细介绍了Unity3D UGUI实现缩放循环拖动展示卡牌效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    诗远3662022-03-11
  • C#c#学习之30分钟学会XAML

    c#学习之30分钟学会XAML

    一个界面程序的核心,无疑就是界面和后台代码,而xaml就是微软为构建应用程序界面而创建的一种描述性语言,也就是说,这东西是搞界面的...

    C#教程网8812021-12-10
  • C#浅谈C# winForm 窗体闪烁的问题

    浅谈C# winForm 窗体闪烁的问题

    下面小编就为大家带来一篇浅谈C# winForm 窗体闪烁的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网7962021-12-21
  • C#C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

    这篇文章主要介绍了C#实现的文件操作封装类,结合完整实例形式分析了C#封装文件的删除,移动,复制,重命名等操作相关实现技巧,需要的朋友可以参考下...

    Rising_Sun3892021-12-28
  • C#C# 后台处理图片的几种方法

    C# 后台处理图片的几种方法

    本篇文章主要介绍了C# 后台处理图片的几种方法,非常具有实用价值,需要的朋友可以参考下。...

    IT小伙儿10162021-12-08
  • C#C#基础之泛型

    C#基础之泛型

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。接下来通过本文给大家介绍c#基础之泛型,感兴趣的朋友一起学习吧...

    方小白7732021-12-03