`
猜不透
  • 浏览: 133384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

正则表达式抓取网页信息

阅读更多

     声明:此正则表达式只适用于.net ,使用的流程为发送http请求返回整个html网页,然后从此html页面抓取想要的数据。

 

 

第一部分:发送httpWebRequest 请求

 

//url 地址
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL"));
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            //浏览器类型设置
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)";
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
              //返回的html网页数据
            String htmlStr = reader.ReadToEnd();

  第二部分:根据返回的html获取有用数据,此方法适用于所有想通过ID或Class等等的标签找到html的需求,拿下面一个方法为例

	/// <summary>
        /// 获得颜色
         /// </summary>
        /// <param name="htmlStr"></param>
        /// <returns></returns>
        public String getColor(String htmlStr)
        {
  //获取class为  DetailsC_Sku的html ,还可改为ID的方式   
//string regstr6 = @"<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>";    
string regstr6 = @"<(?<HtmlTag>[\w]+)[^>]*\s[cC][lL][aA][sS][sS]=(?<Quote>";
            string regstr7 = "[\"']?)DetailsC_Sku(?(Quote)";
            string regstr8 = @"\k<Quote>)";
            string regstr9 = "[\"']?[^>]*>";
            string regstr10 = @"((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>";
            StringBuilder sb2 = new StringBuilder();
            sb2.Append(regstr6);
            sb2.Append(regstr7);
            sb2.Append(regstr8);
            sb2.Append(regstr9);
            sb2.Append(regstr10);
	    //根据正则表达式获取的html
            String sizeHtml = Regex.Match(htmlStr, sb2.ToString(), RegexOptions.Singleline).ToString();
            if (!String.IsNullOrEmpty(sizeHtml))
            {
                String newhtml = htmlStr.Replace(sizeHtml, "");
                string regstr11 = @"<(?<HtmlTag>[\w]+)[^>]*\s[cC][lL][aA][sS][sS]=(?<Quote>";
                string regstr12 = "[\"']?)DetailsC_Sku(?(Quote)";
                string regstr13 = @"\k<Quote>)";
                string regstr14 = "[\"']?[^>]*>";
                string regstr15 = @"((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>";
                StringBuilder sb3 = new StringBuilder();
                sb3.Append(regstr11);
                sb3.Append(regstr12);
                sb3.Append(regstr13);
                sb3.Append(regstr14);
                sb3.Append(regstr15);
                String colorHtml = Regex.Match(newhtml, sb3.ToString(), RegexOptions.Singleline).ToString();
                if (String.IsNullOrEmpty(colorHtml))
                    return "";

                //找出此colorHtml中的所有a 标签
                Regex regex2 = new Regex(@"<a.*?>[\s\S]*?<\/a>");
                MatchCollection mc2 = regex2.Matches(colorHtml);
                StringBuilder sbs = new StringBuilder();
                //循环找到颜色
                if (mc2.Count > 0)
                {
                    foreach (Match mm in mc2)
                    {
                        sbs.Append(RemoveHtml(mm.Value.ToString())).Append(",");
                    }
                }
                return sbs.ToString();
            }
            return "";
            
        }

 

 

 /// <summary>
       /// 替换字符串中的html标签为空返回标签里的内容
        /// </summary>
        /// <param name="src"></param>
        /// <returns></returns>
        public string RemoveHtml(string src)
        {
            Regex htmlReg = new Regex(@"<[^>]+>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Regex htmlSpaceReg = new Regex("\\&nbsp\\;", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Regex spaceReg = new Regex("\\s{2,}|\\ \\;", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Regex styleReg = new Regex(@"<style(.*?)</style>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
            Regex scriptReg = new Regex(@"<script(.*?)</script>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

            src = styleReg.Replace(src, string.Empty);
            src = scriptReg.Replace(src, string.Empty);
            src = htmlReg.Replace(src, string.Empty);
            src = htmlSpaceReg.Replace(src, " ");
            src = spaceReg.Replace(src, " ");
            return src.Trim();
        }

 

分享到:
评论

相关推荐

    C#.Net使用正则表达式抓取百度百家文章列表

    以上就是使用C#.NET结合正则表达式抓取百度百家文章列表的相关知识点,实际操作中还需要结合具体网页结构进行调整。在实践中,不断提升对正则表达式和网络编程的理解,将有助于更高效地进行数据抓取。

    Python使用正则表达式抓取网页图片的方法示例

    本文实例讲述了Python使用正则表达式抓取网页图片的方法。分享给大家供大家参考,具体如下: #!/usr/bin/python import re import urllib #获取网页信息 def getHtml(url): page = urllib.urlopen(url) ...

    正则表达式转换工具

    - 网页抓取:在网络爬虫中,正则表达式用于提取网页中的特定信息。 5. **学习与进阶** - 掌握基本语法:理解各种元字符、量词和字符类的用法。 - 学习高级特性:如分组、后向引用、正向预查等,增强表达能力。 ...

    使用正则表达式抓取页面Email

    在IT行业中,正则表达式...总之,利用正则表达式抓取网页中的电子邮件地址是一项常见的任务,它需要结合对正则表达式、HTML解析以及网络请求的理解。在实际操作中,应根据具体需求进行调整,确保抓取的效率和准确性。

    正则表达式抓取网页数据制作小词典

    在本项目“正则表达式抓取网页数据制作小词典”中,我们将探讨如何利用正则表达式从网页中抓取数据,并将这些数据整理成一个小型的词典。 首先,理解正则表达式的语法是关键。它由各种特殊字符和普通字符组成,如...

    正则表达式学习资料以及练习项目代码很多

    - **网页抓取**:在网页源码中使用正则表达式查找特定信息,辅助网络爬虫工作。 - **文本替换**:使用`re.sub()`可以批量替换字符串中的特定模式,实现格式化和转换。 6. **进阶话题** - **正则表达式性能优化**...

    精通正则表达式中文版英文版_中文版为扫描版

    正则表达式不仅用于简单的查找和替换,还能在数据验证(如电子邮件地址或电话号码格式检查)、文本分析、网页抓取等场景中发挥巨大作用。通过学习《精通正则表达式》,读者将能够编写更高效、更精确的正则表达式,...

    正则表达式新闻抓取程序

    【正则表达式新闻抓取程序】是一种利用特定的规则(正则表达式)来从网页中筛选并提取新闻信息的软件工具。该程序的主要功能是根据用户设定的抓取源,即目标网站URL,以及定义好的标题正则表达式,自动地在网络上...

    VB用正则表达式提取网页中的链接

    本次将详细解析如何利用Visual Basic(VB)结合正则表达式来高效地从网页中抽取链接信息。这不仅适用于自动化网络爬虫,也广泛应用于数据挖掘、内容分析等场景。 ### 标题解读:“VB用正则表达式提取网页中的链接”...

    源码(精通正则表达式&实战正则表达式)

    2. **文本处理**:从大量文本中提取特定信息,如网页爬虫抓取链接、解析HTML标签等。 3. **替换操作**:批量替换文本,如去除空白字符、格式化代码等。 4. **URL解析**:利用正则处理URL,提取协议、域名、路径、...

    C#正则表达式提取网页数据

    本主题聚焦于利用C#的正则表达式功能来从网页中提取数据,并将其存储到SQL Server 2005数据库。下面将详细阐述这一过程中的关键知识点。 一、正则表达式(Regular Expression) 正则表达式是一种强大的文本处理工具...

    易语言正则表达式取网址和名称

    在IT行业中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于...这种方法在网页抓取、数据分析、日志分析等场景中非常常见。理解并熟练掌握正则表达式,能显著提高在易语言中处理字符串问题的能力。

    正则表达式的妙用

    这展示了一个具体的例子,即如何利用正则表达式解析网页内容,抓取隐藏在HTML代码中的特定信息。 正则表达式的核心在于其模式匹配能力。它由一系列字符、特殊符号和操作符组成,可以匹配各种复杂的数据格式。例如,...

    正则表达式测试工具

    - **爬虫**:在网页抓取过程中,正则表达式用于提取所需的信息,如链接、标题或文章内容。 - **数据清洗**:处理杂乱无章的数据,去除不必要的字符或格式化文本。 - **自动化脚本**:在批处理脚本中,正则表达式可以...

    精通正则表达式电子书

    5. **数据提取**:从非结构化数据中提取关键信息,如从网页中抓取特定数据。 #### 六、总结 《精通正则表达式》是一本非常适合想要深入学习正则表达式的读者的书籍。它不仅涵盖了正则表达式的基础知识,还深入介绍...

    精通正则表达式(第三版)简体中文版

    4. **数据提取**:从复杂的数据中提取所需的信息,如从网页中抓取特定内容。 5. **日志分析**:从系统日志中提取关键信息进行监控和报警。 #### 五、不同环境下的正则表达式 - **Perl兼容正则表达式(PCRE)**:Perl...

    电话号码及日期时间提取(正则表达式 C)

    在本项目中,“电话号码及日期时间提取(正则表达式 C)”是一个使用C语言编写的程序,它能够从文本中有效地识别和提取中国大陆的手机号码和固定电话号码,以及简体中文网页中的日期和时间信息。 首先,我们要理解...

    正则抓取页面

    以下是一个简单的Python示例,演示如何使用正则表达式抓取网页: ```python import re import requests url = 'http://example.com' # 网页URL response = requests.get(url) # 发送HTTP请求获取网页内容 ...

Global site tag (gtag.js) - Google Analytics