当前位置:编程学习 > C#/ASP.NET >>

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;
/// <summary>
/// 网页类
/// </summary>
public class WebPage
{

    #region 私有成员
    private Uri m_uri;   //网址
    private List<Link> 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<string, CookieContainer> webcookies = new Dictionary<string, CookieContainer>();//存放所有网页的Cookie
    private string m_post;  //此网页的登陆页需要的POST数据
    private string m_loginurl;  //此网页的登陆页
    #endregion


    #region 私有方法
    /// <summary>
    /// 这私有方法从网页的HTML代码中分析出链接信息
    /// </summary>
    /// <returns>List<Link></returns>
    private List<Link> getLinks()
    {
        if (m_links.Count == 0)
        {
            Regex[] regex = new Regex[2];
            regex[0] = new Regex("(?m)<a[^><]+href=("|)?(?<url>([^>"\s)])+)("|)?[^>]*>(?<text>(\w|\W)*?)</", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            regex[1] = new Regex("<[i]*frame[^><]+src=("|)?(?<url>([^>"\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;
    }
  
    /// <summary>
    /// 此私有方法从一段HTML文本中提取出一定字数的纯文本
    /// </summary>
    /// <param name="instr">HTML代码</param>
    /// <param name="firstN">提取从头数多少个字</param>
    /// <param name="withLink">是否要链接里面的字</param>
    /// <returns>纯文本</re

补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,