C#实现抓取和分析网页类实例

这篇文章主要介绍了C#实现抓取和分析网页类,实例分析了C#抓取及分析网页中文本及连接的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#实现抓取和分析网页类。分享给大家供大家参考。具体分析如下:

这里介绍了抓取和分析网页的类。

其主要功能有:

1、提取网页的纯文本,去所有html标签和javascript代码
2、提取网页的链接,包括href和frame及iframe
3、提取网页的title等(其它的标签可依此类推,正则是一样的)
4、可以实现简单的表单提交及cookie保存

 /* * Author:Sunjoy at CCNU * 如果您改进了这个类请发一份代码给我(ccnusjy 在gmail.com) */ using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Threading; using System.Web; ///  /// 网页类 ///  public class WebPage { #region 私有成员 private Uri m_uri; //网址 private List m_links; //此网页上的链接 private string m_title;  //此网页的标题 private string m_html;   //此网页的HTML代码 private string m_outstr;  //此网页可输出的纯文本 private bool m_good;   //此网页是否可用 private int m_pagesize;  //此网页的大小 private static Dictionary webcookies = new Dictionary();//存放所有网页的Cookie private string m_post; //此网页的登陆页需要的POST数据 private string m_loginurl; //此网页的登陆页 #endregion #region 私有方法 ///  /// 这私有方法从网页的HTML代码中分析出链接信息 ///  /// List private List getLinks() { if (m_links.Count == 0) { Regex[] regex = new Regex[2]; regex[0] = new Regex("(?m)<]+href=(\"|')?(?([^>\"'\\s)])+)(\"|')?[^>]*>(?(\\w|\\W)*?)<]+src=(\"|')?(?([^>\"'\\s)])+)(\"|')?[^>]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase); for (int i = 0; i <2; i++) { Match match = regex[i].Match(m_html); while (match.Success) { try { string url = new Uri(m_uri, match.Groups["url"].Value).AbsoluteUri; string text = ""; if (i == 0) text = new Regex("(<[^>]+>)|(\\s)|( )|&|\"", RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(match.Groups["text"].Value, ""); Link link = new Link(url, text); m_links.Add(link); } catch(Exception ex){Console.WriteLine(ex.Message); }; match = match.NextMatch(); } } } return m_links; } ///  /// 此私有方法从一段HTML文本中提取出一定字数的纯文本 ///  /// HTML代码 /// 提取从头数多少个字 /// 是否要链接里面的字 /// 纯文本 private string getFirstNchar(string instr, int firstN, bool withLink) { if (m_outstr == "") { m_outstr = instr.Clone() as string; m_outstr = new Regex(@"(?m)]*>(\w|\W)*?]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, ""); m_outstr = new Regex(@"(?m)]*>(\w|\W)*?]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, ""); m_outstr = new Regex(@"(?m)]*>(\w|\W)*?]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, ""); if (!withLink) m_outstr = new Regex(@"(?m)]*>(\w|\W)*?]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(m_outstr, ""); Regex objReg = new System.Text.RegularExpressions.Regex("(<[^>]+?>)| ", RegexOptions.Multiline | RegexOptions.IgnoreCase); m_outstr = objReg.Replace(m_outstr, ""); Regex objReg2 = new System.Text.RegularExpressions.Regex("(\\s)+", RegexOptions.Multiline | RegexOptions.IgnoreCase); m_outstr = objReg2.Replace(m_outstr, " "); } return m_outstr.Length > firstN ? m_outstr.Substring(0, firstN) : m_outstr; } ///  /// 此私有方法返回一个IP地址对应的无符号整数 ///  /// IP地址 ///  private uint getuintFromIP(IPAddress x) { Byte[] bt = x.GetAddressBytes(); uint i = (uint)(bt[0] * 256 * 256 * 256); i += (uint)(bt[1] * 256 * 256); i += (uint)(bt[2] * 256); i += (uint)(bt[3]); return i; } #endregion #region 公有文法 ///  /// 此公有方法提取网页中一定字数的纯文本,包括链接文字 ///  /// 字数 ///  public string getContext(int firstN) { return getFirstNchar(m_html, firstN, true); } ///  /// 此公有方法提取网页中一定字数的纯文本,不包括链接文字 ///  ///  ///  public string getContextWithOutLink(int firstN) { return getFirstNchar(m_html, firstN, false); } ///  /// 此公有方法从本网页的链接中提取一定数量的链接,该链接的URL满足某正则式 ///  /// 正则式 /// 返回的链接的个数 /// List public List getSpecialLinksByUrl(string pattern,int count) { if(m_links.Count==0)getLinks(); List SpecialLinks = new List(); List.Enumerator i; i = m_links.GetEnumerator(); int cnt = 0; while (i.MoveNext() && cnt /// 此公有方法从本网页的链接中提取一定数量的链接,该链接的文字满足某正则式 ///  /// 正则式 /// 返回的链接的个数 /// List public List getSpecialLinksByText(string pattern,int count) { if (m_links.Count == 0) getLinks(); List SpecialLinks = new List(); List.Enumerator i; i = m_links.GetEnumerator(); int cnt = 0; while (i.MoveNext() && cnt  /// 此公有方法获得所有链接中在一定IP范围的链接 ///  /// 起始IP /// 终止IP ///  public List getSpecialLinksByIP(string _ip_start, string _ip_end) { IPAddress ip_start = IPAddress.Parse(_ip_start); IPAddress ip_end = IPAddress.Parse(_ip_end); if (m_links.Count == 0) getLinks(); List SpecialLinks = new List(); List.Enumerator i; i = m_links.GetEnumerator(); while (i.MoveNext()) { IPAddress ip; try { ip = Dns.GetHostEntry(new Uri(i.Current.url).Host).AddressList[0]; } catch { continue; } if(getuintFromIP(ip)>=getuintFromIP(ip_start) && getuintFromIP(ip)<=getuintFromIP(ip_end)) { SpecialLinks.Add(i.Current); } } return SpecialLinks; } ///  /// 这公有方法提取本网页的纯文本中满足某正则式的文字 ///  /// 正则式 /// 返回文字 public string getSpecialWords(string pattern) { if (m_outstr == "") getContext(Int16.MaxValue); Regex regex = new Regex(pattern, RegexOptions.Multiline | RegexOptions.IgnoreCase ); Match mc=regex.Match(m_outstr); if (mc.Success) return mc.Groups[1].Value; return string.Empty; } #endregion #region 构造函数 private void Init(string _url) { try { m_uri = new Uri(_url); m_links = new List(); m_html = ""; m_outstr = ""; m_title = ""; m_good = true; if (_url.EndsWith(".rar") || _url.EndsWith(".dat") || _url.EndsWith(".msi")) { m_good = false; return; } HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(m_uri); rqst.AllowAutoRedirect = true; rqst.MaximumAutomaticRedirections = 3; rqst.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; rqst.KeepAlive = true; rqst.Timeout = 30000; lock (WebPage.webcookies) { if (WebPage.webcookies.ContainsKey(m_uri.Host)) rqst.CookieContainer = WebPage.webcookies[m_uri.Host]; else { CookieContainer cc = new CookieContainer(); WebPage.webcookies[m_uri.Host] = cc; rqst.CookieContainer = cc; } } HttpWebResponse rsps = (HttpWebResponse)rqst.GetResponse(); Stream sm = rsps.GetResponseStream(); if (!rsps.ContentType.ToLower().StartsWith("text/") || rsps.ContentLength > 1 << 22) { rsps.Close(); m_good = false; return; } Encoding cding = System.Text.Encoding.Default; string contenttype=rsps.ContentType.ToLower(); int ix = contenttype.IndexOf("charset="); if (ix != -1) { try { cding = System.Text.Encoding.GetEncoding(rsps.ContentType.Substring(ix + "charset".Length + 1)); } catch { cding = Encoding.Default; } m_html = new StreamReader(sm, cding).ReadToEnd(); } else { m_html = new StreamReader(sm, cding).ReadToEnd(); Regex regex = new Regex("charset=(?[^=]+)?\"",RegexOptions.IgnoreCase); string strcding = regex.Match(m_html).Groups["cding"].Value; try { cding = Encoding.GetEncoding(strcding); } catch{ cding = Encoding.Default; } byte[] bytes=Encoding.Default.GetBytes(m_html.ToCharArray()); m_html = cding.GetString(bytes); if (m_html.Split('?').Length > 100) { m_html=Encoding.Default.GetString(bytes); } } m_pagesize = m_html.Length; m_uri = rsps.ResponseUri; rsps.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message+m_uri.ToString()); m_good = false; } } public WebPage(string _url) { string uurl = ""; try { uurl = Uri.UnescapeDataString(_url); _url = uurl; } catch { }; Regex re = new Regex("(?[^\x00-\xff]+)"); Match mc = re.Match(_url); if (mc.Success) { string han = mc.Groups["h"].Value; _url = _url.Replace(han, System.Web.HttpUtility.UrlEncode(han, Encoding.GetEncoding("GB2312"))); } Init(_url); } public WebPage(string _url, string _loginurl, string _post) { string uurl = ""; try { uurl = Uri.UnescapeDataString(_url); _url = uurl; } catch { }; Regex re = new Regex("(?[^\x00-\xff]+)"); Match mc = re.Match(_url); if (mc.Success) { string han = mc.Groups["h"].Value; _url = _url.Replace(han, System.Web.HttpUtility.UrlEncode(han, Encoding.GetEncoding("GB2312"))); } if (_loginurl.Trim() == "" || _post.Trim() == "" || WebPage.webcookies.ContainsKey(new Uri(_url).Host)) { Init(_url); } else { #region 登陆 string indata = _post; m_post = _post; m_loginurl = _loginurl; byte[] bytes = Encoding.Default.GetBytes(_post); CookieContainer myCookieContainer = new CookieContainer(); try { //新建一个CookieContainer来存放Cookie集合 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(_loginurl); //新建一个HttpWebRequest myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; myHttpWebRequest.AllowAutoRedirect = false; myHttpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; myHttpWebRequest.Timeout = 60000; myHttpWebRequest.KeepAlive = true; myHttpWebRequest.ContentLength = bytes.Length; myHttpWebRequest.Method = "POST"; myHttpWebRequest.CookieContainer = myCookieContainer; //设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer Stream myRequestStream = myHttpWebRequest.GetRequestStream(); myRequestStream.Write(bytes, 0, bytes.Length); myRequestStream.Close(); HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); foreach (Cookie ck in myHttpWebResponse.Cookies) { myCookieContainer.Add(ck); } myHttpWebResponse.Close(); } catch { Init(_url); return; } #endregion #region 登陆后再访问页面 try { m_uri = new Uri(_url); m_links = new List(); m_html = ""; m_outstr = ""; m_title = ""; m_good = true; if (_url.EndsWith(".rar") || _url.EndsWith(".dat") || _url.EndsWith(".msi")) { m_good = false; return; } HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(m_uri); rqst.AllowAutoRedirect = true; rqst.MaximumAutomaticRedirections = 3; rqst.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"; rqst.KeepAlive = true; rqst.Timeout = 30000; rqst.CookieContainer = myCookieContainer; lock (WebPage.webcookies) { WebPage.webcookies[m_uri.Host] = myCookieContainer; } HttpWebResponse rsps = (HttpWebResponse)rqst.GetResponse(); Stream sm = rsps.GetResponseStream(); if (!rsps.ContentType.ToLower().StartsWith("text/") || rsps.ContentLength > 1 << 22) { rsps.Close(); m_good = false; return; } Encoding cding = System.Text.Encoding.Default; int ix = rsps.ContentType.ToLower().IndexOf("charset="); if (ix != -1) { try { cding = System.Text.Encoding.GetEncoding(rsps.ContentType.Substring(ix + "charset".Length + 1)); } catch { cding = Encoding.Default; } } m_html = new StreamReader(sm, cding).ReadToEnd(); m_pagesize = m_html.Length; m_uri = rsps.ResponseUri; rsps.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message+m_uri.ToString()); m_good = false; } #endregion } } #endregion #region 属性 ///  /// 通过此属性可获得本网页的网址,只读 ///  public string URL { get { return m_uri.AbsoluteUri; } } ///  /// 通过此属性可获得本网页的标题,只读 ///  public string Title { get { if (m_title == "") { Regex reg = new Regex(@"(?m)]*>(?(?:\w|\W)*?)</title[^>]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase ); Match mc = reg.Match(m_html); if (mc.Success) m_title= mc.Groups["title"].Value.Trim(); } return m_title; } } /// <summary> /// 此属性获得本网页的所有链接信息,只读 /// </summary> public List<link> Links { get { if (m_links.Count == 0) getLinks(); return m_links; } } /// <summary> /// 此属性返回本网页的全部纯文本信息,只读 /// </summary> public string Context { get { if (m_outstr == "") getContext(Int16.MaxValue); return m_outstr; } } /// <summary> /// 此属性获得本网页的大小 /// </summary> public int PageSize { get { return m_pagesize; } } /// <summary> /// 此属性获得本网页的所有站内链接 /// </summary> public List<link> InsiteLinks { get { return getSpecialLinksByUrl("^http://"+m_uri.Host,Int16.MaxValue); } } /// <summary> /// 此属性表示本网页是否可用 /// </summary> public bool IsGood { get { return m_good; } } /// <summary> /// 此属性表示网页的所在的网站 /// </summary> public string Host { get { return m_uri.Host; } } /// <summary> /// 此网页的登陆页所需的POST数据 /// </summary> public string PostStr { get { return m_post; } } /// <summary> /// 此网页的登陆页 /// </summary> public string LoginURL { get { return m_loginurl; } } #endregion } /// <summary> /// 链接类 /// </summary> public class Link { public string url; //链接网址 public string text; //链接文字 public Link(string _url, string _text) { url = _url; text = _text; } }</pre></div><p>希望本文所述对大家的C#程序设计有所帮助。</p></div><p>以上就是C#实现抓取和分析网页类实例的详细内容,更多请关注0133技术站其它相关文章!</p></article><div class="post-actions"><a href="javascript:;" etap="like" class="post-like action action-like" data-pid="0"><i
                        class="fa fa-thumbs-o-up"></i>赞(<span>0</span>)</a><a href="javascript:;"
                                                                               class="action action-rewards"
                                                                               data-event="rewards"><i
                    class="fa fa-jpy"></i> 打赏</a></div><div class="post-copyright">未经允许不得转载:<a href="/">0133技术站首页</a> » <a href="/cate160/">其他教程</a></div><!--<div class="article-tags">标签:<a href="/archives/tag/javascript" rel="tag">JavaScript</a><a
                    href="/archives/tag/%e5%be%ae%e4%bf%a1" rel="tag">微信</a><a
                    href="/archives/tag/%e5%be%ae%e4%bf%a1%e7%9a%84%e7%89%88%e6%9c%ac%e5%8f%b7" rel="tag">微信的版本号</a><a
                    href="/archives/tag/%e7%89%88%e6%9c%ac%e5%8f%b7" rel="tag">版本号</a><a
                    href="/archives/tag/%e8%af%ad%e4%b9%89%e5%8c%96" rel="tag">语义化</a></div>--><nav class="article-nav"><span class="article-nav-prev">上一篇<br><a href="/cate160/11386069569025.html" rel="prev">C#实现的调用DOS命令操作类实例</a></span><span class="article-nav-next">下一篇<br><a href="/cate160/11386081996025.html" rel="next">C# 中闭包(Closure)详解</a></span></nav><div class="relates relates-thumb"><div class="title"><h3>相关文章</h3></div><ul><li><a href="/cate160/1113781546025.html"><img data-src="https://ss.0133.cn/article/38/36/3f/38363f90282443f114207cd7d5d02c26.jpg-160" alt="关于golang利用channel和goroutine完成统计素数的思路" class="thumb"></a><a href="/cate160/1113781546025.html">关于golang利用channel和goroutine完成统计素数的思路</a></li><li><a href="/cate160/1113782720000.html"><img data-src="https://ss.0133.cn/article/2c/5d/66/2c5d663aa3f492d3dc21c612517faf47.jpg-160" alt="C# NullReferenceException解决案例讲解" class="thumb"></a><a href="/cate160/1113782720000.html">C# NullReferenceException解决案例讲解</a></li><li><a href="/cate160/1113821489225.html"><img data-src="https://ss.0133.cn/article/03/e1/f8/03e1f86f7c4ac5489f9a6f6a14ec2258.jpg-160" alt="vscode 左侧扩展活动栏内容消失的问题及解决方法" class="thumb"></a><a href="/cate160/1113821489225.html">vscode 左侧扩展活动栏内容消失的问题及解决方法</a></li><li><a href="/cate160/1113823840625.html"><img data-src="https://ss.0133.cn/article/a7/70/b5/a770b593bb4ba9777739bb6345d63940.jpg-160" alt="详细讲解计算机网络――应用层" class="thumb"></a><a href="/cate160/1113823840625.html">详细讲解计算机网络――应用层</a></li><li><a href="/cate160/1113826192225.html"><img data-src="https://ss.0133.cn/article/18/78/b3/1878b390cc5ce06be38c68b684810f6c.jpg-160" alt="gaussdb 200安装 data studio jdbc idea链接保姆级安装步骤" class="thumb"></a><a href="/cate160/1113826192225.html">gaussdb 200安装 data studio jdbc idea链接保姆级安装步骤</a></li><li><a href="/cate160/1113830896025.html"><img data-src="https://ss.0133.cn/article/8e/29/15/8e291507b6a091ec56b5c75a8bc24d98.jpg-160" alt="CPU,GPU,DPU,TPU,NPU,BPU等处理器的性能及概念" class="thumb"></a><a href="/cate160/1113830896025.html">CPU,GPU,DPU,TPU,NPU,BPU等处理器的性能及概念</a></li><li><a href="/cate160/1113834424400.html"><img data-src="https://ss.0133.cn/article/d2/51/cb/d251cbfd4c34bb44acd07c06512b1191.jpg-160" alt="C# ExecuteScalar()方法案例讲解" class="thumb"></a><a href="/cate160/1113834424400.html">C# ExecuteScalar()方法案例讲解</a></li><li><a href="/cate160/1114012600625.html"><img data-src="https://ss.0133.cn/article/d4/94/f7/d494f77643053eb87bcf6e72564d7afb.jpg-160" alt="C# MemoryStream类案例详解" class="thumb"></a><a href="/cate160/1114012600625.html">C# MemoryStream类案例详解</a></li></ul></div><!--
            <div class="title" id="comments"><h3>评论
                    <small>抢沙发</small></h3></div><div id="respond" class="no_webshot"><form action="return false;" method="post" id="commentform"><div class="comt"><div class="comt-title"><img data-src="https://secure.gravatar.com/avatar/?s=100&d=mm" class="avatar avatar-100"
                                 height="50" width="50"><p><a id="cancel-comment-reply-link" href="javascript:;">取消</a></p></div><div class="comt-box"><textarea placeholder="你的评论可以一针见血" class="input-block-level comt-area" name="comment"
                                      id="comment" cols="100%" rows="3" tabindex="1"
                                      onkeydown="if(event.ctrlKey&&event.keyCode==13){document.getElementById('submit').click();return false};"></textarea><div class="comt-ctrl"><div class="comt-tips"><input type='hidden' name='comment_post_ID' value='6053'
                                                              id='comment_post_ID'/><input type='hidden' name='comment_parent' id='comment_parent' value='0'/><p style="display: none;"><input type="hidden" id="akismet_comment_nonce"
                                                                     name="akismet_comment_nonce" value="40dd7081eb"/></p><label for="comment_mail_notify" class="checkbox inline hide"
                                               style="padding-top:0"><input type="checkbox" name="comment_mail_notify"
                                                                            id="comment_mail_notify"
                                                                            value="comment_mail_notify"
                                                                            checked="checked"/>有人回复时邮件通知我</label><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="245"/></p></div><button type="button" name="submit" id="submit" tabindex="5">提交评论</button>--><!-- <span data-type="comment-insert-smilie" class="muted comt-smilie"><i class="icon-thumbs-up icon12"></i> 表情</span> --><!--
                            </div></div><div class="comt-comterinfo" id="comment-author-info"><ul><li class="form-inline"><label class="hide" for="author">昵称</label><input class="ipt" type="text" name="author" id="author" value="" tabindex="2" placeholder="昵称"><span class="text-muted">昵称 (必填)</span></li><li class="form-inline"><label class="hide" for="email">邮箱</label><input class="ipt" type="text" name="email" id="email" value="" tabindex="3" placeholder="邮箱"><span class="text-muted">邮箱 (必填)</span></li><li class="form-inline"><label class="hide" for="url">网址</label><input class="ipt" type="text" name="url" id="url" value="" tabindex="4" placeholder="网址"><span class="text-muted">网址</span></li></ul></div></div></form></div>--></div></div><div class="sidebar"><div class="widget widget_ui_tags"><h3>编程</h3><div class="items"><a href="/cate104/">Java</a><a href="/cate105/">C语言</a><a href="/cate133/">新手学堂</a><a href="/cate149/">数据库</a><a href="/cate151/">ASP编程</a><a href="/cate153/">PHP编程</a><a href="/cate154/">XML/RSS</a><a href="/cate155/">Flex</a><a href="/cate156/">正则表达式</a><a href="/cate158/">R语言</a><a href="/cate159/">汇编语言</a><a href="/cate160/">其他教程</a><a href="/cate165/">移动</a></div></div><form method="get" class="search-form clearfix" id="search-formhybrid-search" target="_blank" action="/search/article/"><div class="search-input-wrap"><input type="text" class="search-text" placeholder="来搜我" name="word" id="search-texthybrid-search"
                       value="" data-placeholder=""><b class="search-liaosheji"></b><button type="submit" class="search-button"><i class="icon-search"></i></button></div></form><div style="text-align:center;margin:0 auto;"><ul class='hot-search layui-clear'><li style="float:left;margin-right:20px;">热门搜索:</li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=分页实例'>分页实例</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=实现分页'>实现分页</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=实例讲解ASP实现抓取网上房产信息'>实例讲解ASP实现抓取网上房产信息</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=实例解析'>实例解析</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=Boot和Thymeleaf实现分页'>Boot和Thymeleaf实现分页</a></li></ul></div><br/><div class="widget widget_ui_posts"><h3>置顶推荐</h3><ul><li><a href="/cate99/113248537576900.html"><span class="thumbnail"><img data-src="https://ss.0133.cn/upload/article/000/000/001/61c03aad062a1298.jpg" alt="找钢网是什么" class="thumb"></span><span class="text">找钢网是什么</span><span
                            class="muted">2021-12-20</span></a></li></ul></div><div class="widget widget_recent_entries"><h3>猜你喜欢</h3><ul><li><a href="/cate160/11325281972225.html" target="_blank">c# 三种方法调用WebService接口</a><span class="post-date">2021-10-04</span></li><li><a href="/cate160/11326138037225.html" target="_blank">C#反射应用实例</a><span class="post-date">2021-10-04</span></li><li><a href="/cate160/1114214560625.html" target="_blank">Unity ScrollView实现无限滑动效果</a><span class="post-date">2021-09-10</span></li><li><a href="/cate160/11357424582500.html" target="_blank">RxSwift学习教程之基础篇</a><span class="post-date">2021-10-05</span></li><li><a href="/cate160/11323431024100.html" target="_blank">C# 实现阶乘 (递归,非递归) 实现代码</a><span class="post-date">2021-10-04</span></li><li><a href="/cate160/11331280784900.html" target="_blank">Unity实现模型点击事件的方法</a><span class="post-date">2021-10-04</span></li><li><a href="/cate160/11378901762500.html" target="_blank">C#从DataTable获取数据的方法</a><span class="post-date">2021-10-05</span></li><li><a href="/cate160/11381170372100.html" target="_blank">C#实现在两个数字之间生成随机数的方法</a><span class="post-date">2021-10-05</span></li></ul></div><!--<div class="widget widget_ui_tags"><h3>热门标签</h3><div class="items"><a href="/archives/tag/javascript">JavaScript (324)</a></div></div><div class="widget widget_ui_comments"><h3>最新评论</h3><ul><li><a href="" title=""><img data-src="" class="avatar avatar-100" height="50" width="50"><strong></strong></a></li></ul></div>--></div><div id="leftbar" class="leftbar"><div class="leftbar-con"><div style="text-align: center; width: 160px;"></div></div></div></section><footer class="footer"><div class="container"><p>© 2022 <a href="/">WEB前端开发</a></p><p><a href="/cate88/">工具教程</a> | <a href="/cate71/">前端开发</a> | <a href="/cate61/">常见问题</a> | <a
                href="/cate129/">操作系统</a> | <a href="/cate103/">编程</a>  | <a href="/cate108/">网络安全</a>  | <a href="/cate120/">设计</a>  | <a href="/cate137/">站长技巧</a></p><div class="footer-gav" style="margin-bottom: 10px ;font-size: 12px;"><img
                src="https://ss.0133.cn/newimg88/2016/06/beian-gov-cn.png" style="vertical-align: middle; height: 14px;"/><a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2021014202号-2</a></div><div class="footer-qrcode"></div></div></footer><script>    window.jsui = {
        www: '',
        uri: '/wp-content/themes/dux',
        ver: '5.2.5',
        roll: ["1", "2"],
        ajaxpager: '0',
        url_rp: '/about'
    };
</script><script type='text/javascript' src='/wp-content/themes/dux/js/libs/bootstrap.min.js?ver=5.2.5'></script><script type='text/javascript' src='/wp-content/themes/dux/js/loader.js?ver=5.2.5'></script><script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=5.0.2'></script><script async="async" type='text/javascript' src='/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8'></script><script type="text/javascript">    var $win = jQuery(window);

    var $WindowW = $win.width();

    var $threebar = jQuery("#leftbar");
    if ($threebar.length) {
        var offsetT = $threebar.offset().top;
        $win.on("scroll.leftbar", function () {
            if ($WindowW >= 1200) {
                if ($win.scrollTop() >= (offsetT)) {
                    $threebar.find(".leftbar-con").css({
                        "position": "fixed",
                        "top": 0
                    });
                } else {
                    $threebar.find(".leftbar-con").css("position", "static")
                }
            }
        });
    }

    // Array
    var imagesArr = [];
    $('#article-content').find("img").each(function (index, Element) {
        imagesArr.push(Element)
    });
    mediumZoom(imagesArr, {
        margin: 24,
        background: '#FFFFFF',
        scrollOffset: 0
    })

</script><script>    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r;
        i[r] = i[r] || function () {
                    (i[r].q = i[r].q || []).push(arguments)
                }, i[r].l = 1 * new Date();
        a = s.createElement(o),
                m = s.getElementsByTagName(o)[0];
        a.async = 1;
        a.src = g;
        m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

    ga('create', 'UA-3448069-1', 'css88.com');
    ga('send', 'pageview');

</script><script>    var _hmt = _hmt || [];
    (function () {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?08985692e4db1e8be1cff8097c2979b7";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script><script>    (function () {
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        }
        else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
</script></body></html>