c 抓取网页数据(具体分析如下实现抓取和分析网页类,实例分析了抓取及分析)
优采云 发布时间: 2021-11-06 03:14c 抓取网页数据(具体分析如下实现抓取和分析网页类,实例分析了抓取及分析)
本文文章主要介绍了网页爬取分析的C#实现,并举例分析了C#对网页中的文字和连接进行抓取和分析的相关使用技巧。有一定的参考价值,有需要的朋友可以参考以下
本文介绍了爬取和分析网页的 C# 实现。分享给大家,供大家参考。具体分析如下:
以下是用于抓取和分析网页的类。
它的主要功能是:
1、 提取网页的纯文本,转到所有html标签和javascript代码
2、 提取网页链接,包括href、frame和iframe
3、 提取网页标题等(其他标签类推,规律相同)
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)]*>(?(\\w|\\W)*?)(\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(?(?:\w|\W)*?)]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase ); Match mc = reg.Match(m_html); if (mc.Success) m_title= mc.Groups["title"].Value.Trim(); } return m_title; } } /// /// 此属性获得本网页的所有链接信息,只读 /// public List Links { get { if (m_links.Count == 0) getLinks(); return m_links; } } /// /// 此属性返回本网页的全部纯文本信息,只读 /// public string Context { get { if (m_outstr == "") getContext(Int16.MaxValue); return m_outstr; } } /// /// 此属性获得本网页的大小 /// public int PageSize { get { return m_pagesize; } } /// /// 此属性获得本网页的所有站内链接 /// public List InsiteLinks { get { return getSpecialLinksByUrl("^http://"+m_uri.Host,Int16.MaxValue); } } /// /// 此属性表示本网页是否可用 /// public bool IsGood { get { return m_good; } } /// /// 此属性表示网页的所在的网站 /// public string Host { get { return m_uri.Host; } } /// /// 此网页的登陆页所需的POST数据 /// public string PostStr { get { return m_post; } } /// /// 此网页的登陆页 /// public string LoginURL { get { return m_loginurl; } } #endregion } /// /// 链接类 /// public class Link { public string url; //链接网址 public string text; //链接文字 public Link(string _url, string _text) { url = _url; text = _text; } }
我希望这篇文章对你的 C# 编程有所帮助。
以上就是爬取分析网页类示例的C#实现的详细内容。更多详情请关注其他相关html中文网站文章!