获取HTML源码(只取文字,判断编码,过滤标签)

private void button1_Click(object sender, EventArgs e)
        {
            string s1 = this.textBox1.Text;
            //正则表达式内容
            //string match = @"^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$";
            //string match = @"[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*$";
            string match = @"[a-zA-z]+://[^\s]*";
            //初始化正则表达式实例
            Regex reg = new Regex(match);
            //开始验证
            bool HasValidate = reg.IsMatch(s1);

            if (HasValidate)
            {
                //MessageBox.Show("这是网站有效URL格式。");
                try
                {
                    string tmp = GetHtml(s1);
                    string tmpend = StripHTML(tmp);

                }
                catch (Exception)
                {
                    //MessageBox.Show("3.该网站只能手动查询!");
                }
            }
        }

 

 

1.获取HTML

GetHtml(String Url)

View Code
        /// <summary>
        /// 获取有效的HTML
        /// </summary>
        /// <param name="Url"></param>
        /// <returns></returns>
        public String GetHtml(String Url)
        {
            string sException = null;

            string sRslt = null;
            string GBsRslt = null;
            StreamReader htm = null;
            WebResponse oWebRps = null;
            WebResponse bWebRps = null;
            int a = 0;

            WebRequest oWebRqst = WebRequest.Create(Url);

            oWebRqst.Timeout = 50000;

            WebRequest bWebRqst = WebRequest.Create(Url);

            bWebRqst.Timeout = 50000;

            try
            {
                oWebRps = oWebRqst.GetResponse();
                bWebRps = bWebRqst.GetResponse();
            }
            catch (WebException e)
            {
                sException = e.Message.ToString();

                MessageBox.Show(sException);
            }
            catch (Exception e)
            {
                sException = e.ToString();

                MessageBox.Show(sException);
            }
            finally
            {
                if (oWebRps != null)
                {
                    StreamReader oStreamRd = new StreamReader(
                        oWebRps.GetResponseStream(), Encoding.GetEncoding("UTF-8")
                        );

                    StreamReader GBoStreamRd = new StreamReader(
                        bWebRps.GetResponseStream(), Encoding.GetEncoding("GB2312")
                        );

                    sRslt = oStreamRd.ReadToEnd();
                    GBsRslt = GBoStreamRd.ReadToEnd();

                    if (!isLuan(sRslt)) //判断utf8是否有乱码
                    {
                        htm = oStreamRd;
                    }

                    else
                    {
                        htm = GBoStreamRd;
                    }

                    if (htm == oStreamRd)
                    {
                        a = 1;
                    }
                    else
                    {
                        a = 2;
                    }

                    oStreamRd.Close();
                    GBoStreamRd.Close();
                    oWebRps.Close();

                }
            }
            if (a == 1)
            {
                return sRslt;
            }
            else
            {
                return GBsRslt;
            }

        }

  

2.去除HTML标记(正则表达式)

StripHTML(string strHtml)

View Code
 1         /// <summary>
 2         /// 去除HTML标记
 3         /// </summary>
 4         /// <param name="strHtml">包括HTML的源码 </param>
 5         /// <returns>已经去除后的文字</returns>
 6         public static string StripHTML(string strHtml)
 7         {
 8             //regex_str="<script type=\\s*[^>]*>[^<]*?</script>";//替换<script>内容</script>为空格
 9             string regex_str = "(?is)<script[^>]*>.*?</script>";//替换<script>内容</script>为空格
10             strHtml = Regex.Replace(strHtml, regex_str, "");
11 
12             //regex_str="<script type=\\s*[^>]*>[^<]*?</script>";//替换<style>内容</style>为空格
13             regex_str = "(?is)<style[^>]*>.*?</style>";//替换<style>内容</style>为空格
14             strHtml = Regex.Replace(strHtml, regex_str, "");
15 
16             //regex_str = "(&nbsp;)+";//替换&nbsp;为空格
17             regex_str = "(?i)&nbsp;";//替换&nbsp;为空格
18             strHtml = Regex.Replace(strHtml, regex_str, " ");
19 
20             //regex_str = "(\r\n)*";//替换\r\n为空
21             regex_str = @"[\r\n]*";//替换\r\n为空
22             strHtml = Regex.Replace(strHtml, regex_str, "", RegexOptions.IgnoreCase);
23 
24             //regex_str = "<[^<]*>";//替换Html标签为空
25             regex_str = "<[^<>]*>";//替换Html标签为空
26             strHtml = Regex.Replace(strHtml, regex_str, "");
27 
28             //regex_str = "\n*";//替换\n为空
29             regex_str = @"\n*";//替换\n为空
30             strHtml = Regex.Replace(strHtml, regex_str, "", RegexOptions.IgnoreCase);
31 
32             //可以这样
33             regex_str = "\t*";//替换\t为空
34             strHtml = Regex.Replace(strHtml, regex_str, "", RegexOptions.IgnoreCase);
35 
36             //可以
37             regex_str = "'";//替换'为’
38             strHtml = Regex.Replace(strHtml, regex_str, "", RegexOptions.IgnoreCase);
39 
40             //可以
41             regex_str = " +";//替换若干个空格为一个空格
42             strHtml = Regex.Replace(strHtml, regex_str, "  ", RegexOptions.IgnoreCase);
43 
44             Regex regex = new Regex("<.+?>", RegexOptions.IgnoreCase);
45 
46             string strOutput = regex.Replace(strHtml, "");//替换掉"<"和">"之间的内容
47             strOutput = strOutput.Replace("<", "");
48             strOutput = strOutput.Replace(">", "");
49             strOutput = strOutput.Replace("&nbsp;", "");
50 
51 
52             return strOutput;
53 
54         }

 

3.判断是否为乱码(编码):在StripHTML里调用

View Code
        //判断是否为乱码
        bool isLuan(string txt)
        {

            var bytes = Encoding.UTF8.GetBytes(txt);

            //239 191 189

            for (var i = 0; i < bytes.Length; i++)
            {

                if (i < bytes.Length - 3)

                    if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189)
                    {

                        return true;

                    }
            }

            return false;

        }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值