程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 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;
/// <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)|(&nbsp;)|&|"", 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved