`
huanghuaibin
  • 浏览: 68322 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

C#正则表达式抓取网页备忘录

阅读更多

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spider.VO;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace CAIJI
{
    public class SiteGet
    {
        //<div class="fixList">.*?(((?'Open'<div[^>]*>).*?)+((?'-Open'</div>).*?)+)*(?(Open)(?!))</div>//正解
        private Regex asynchroRegex = new Regex(@"<a[^>]*>((?!<a)(?!</a>).)+</a>", RegexOptions.IgnoreCase);

        public List<ArticleLink> GetTitle(Page page)
        {
            string url = page.Url;
            string htmlBody;
            try
            {
                HttpWebRequest wr = WebRequest.Create(url) as HttpWebRequest;
                wr.Timeout = 3000;
                WebResponse response = wr.GetResponse();
                StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding(page.Encod));
                //读取整个页面
                htmlBody = sr.ReadToEnd();
                sr.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
            Regex re = new Regex(page.BeginTag+".*?(((?'Open'<div[^>]*>).*?)+((?'-Open'</div>).*?)+)*(?(Open)(?!))"+page.EndTag, RegexOptions.Singleline);
            Match ma = re.Match(htmlBody);
            htmlBody = ma.Value.Trim();
            MatchCollection mc = asynchroRegex.Matches(htmlBody);
            string aLink;
            string href;
            string innerHTML;
            ArticleLink al;
            List<ArticleLink> als = new List<ArticleLink>();
            for (int i = 0; i < mc.Count; i++)
            {
                al = new ArticleLink();
                aLink = mc[i].Value;//获取a标签
                //当A标签内的href地址是Javascript则跳过不采集
                if (Regex.IsMatch(aLink, @"\s*javascript\s*:.[^)]*.[^>]*>.*/a>"))
                {
                    continue;
                }
                href = Regex.Match(aLink, @"(?<=href\s*=)\s*[^\s]*").Value.Trim();//获取A标签的href地址

                innerHTML = Regex.Match(aLink, "(?<=>).*(?=<)").Value.Trim();//获取A标签内的文本

                //href地址校正
                if (href.IndexOf("'") == 0 || href.IndexOf("\"") == 0)
                {
                    href = href.Substring(0, href.Length - 1);
                }
                if (href == null || href.Equals("") || href.Equals("#") || innerHTML.Equals(""))
                {
                    continue;
                }
                al.LinkUrl = href;
                al.LinkTitle = innerHTML;
                als.Add(al);
            }
            return als;
           
        }
    }
}

 

结果:

 

图片

 

分享到:
评论

相关推荐

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本...通过深入研究这个C#版的正则表达式测试工具源码,开发者不仅可以巩固正则表达式的基础知识,还可以提升在C#环境中应用正则表达式的能力,同时学习到UI设计和事件处理等方面的实践技巧。

    C#正则表达式大全, 判断字符串是否为正整数,中文,英文.....

    C# 正则表达式大全 正则表达式是指用来描述字符串模式的表达式,通过使用正则表达式,我们可以轻松地实现字符串的匹配、验证、提取和替换等操作。在 C# 中,我们可以使用 System.Text.RegularExpressions 命名空间...

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

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

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

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

    c# 正则表达式生成工具 源代码

    本项目提供了一个C#编写的正则表达式生成工具的源代码,对于学习和理解C#中的正则表达式操作具有很高的价值。 源代码中的关键部分可能包括以下几个方面: 1. **Regex类**:C#中的`System.Text.RegularExpressions`...

    C#正则表达式语法大全

    C#正则表达式语法大全涵盖了在C#编程语言中使用正则表达式进行文本匹配、提取、替换等操作所必需的语法知识。正则表达式是一种强大的文本处理工具,它可以描述字符串的模式,让我们能够执行复杂的搜索和匹配操作。 ...

    正则表达式生成器C#源码.rar

    这里用C#实现了正则表达式相关功能,并记录了所有的正则表达式的相关符号,是一个不可多得的正则表达式生成工具,这个工具适用3种场合: 1.对于初学正则表达式的朋友,这个工具适合你 2.需要C#正则表达式示例代码的...

    C#正则表达式测试工具(项目源码)

    本项目提供了一个C#编写的正则表达式测试工具的源代码,旨在帮助开发者更好地理解和应用正则表达式。 首先,我们要理解C#中的Regex类是正则表达式的核心,它包含了一系列方法,如Match、Matches、Replace、Split等...

    c#使用正则表达式验证身份证号码

    c#使用正则表达式验证身份证号码,工程完全可以运行,方便大家参考和学习

    强大的正则表达式生成工具 C#版

    在这个“强大的正则表达式生成工具 C#版”中,我们可以期待一个专为C#开发者设计的高效、直观的工具,它能够帮助程序员快速创建、测试和调试正则表达式。 正则表达式的基本概念包括: 1. **字符集**:如`.`代表...

    C#正则表达式完全手册

    C#正则表达式是.NET框架中用于在输入文本中匹配特定模式的一套工具。正则表达式由一个或多个字符文字、操作符或构造组成,可用于定义复杂的文本匹配规则。该文档作为一个手册,提供了快速参考的各个部分,覆盖了字符...

    C#正则表达式快速入门.pdf

    《C#正则表达式快速入门》一文深入浅出地介绍了正则表达式这一强大而灵活的文本处理工具在C#编程环境下的应用。正则表达式,因其能够高效地进行模式匹配、搜索和替换等操作,在数据验证、文本处理、搜索与替换等场景...

    C#正则表达式文本框验证:只能输入整数和带两位小数的小数

    一个WinForm程序用以测试C#正则表达式文本框验证:只能输入整数和带两位小数的小数。如暂时无法下载,可以查看本人CSDN博客里相应文章中关于该程序的思路。能力有限,仅供交流学习,请多多指教。

    C#正则表达式 和 测试工具

    在处理文本数据和模式匹配时,C#中的正则表达式(Regular Expressions)是一个强大的工具。正则表达式是一种特殊的字符串模式,用于搜索、替换或提取符合特定规则的文本。它们在数据验证、文本解析、数据提取等多个...

    C#使用正则表达式验证IP地址

    使用正则表达式来判断用户输入的IP地址格式是否正确

    C#正则提取中文

    下面将深入探讨如何使用C#的正则表达式来提取中文字符,这不仅适用于简单的文本处理,也广泛应用于网页抓取、数据清洗等场景。 ### C#正则表达式提取中文 在C#中,`System.Text.RegularExpressions`命名空间提供了...

    C#正则表达式专题学习(很不错)附正则测试工具

    C#正则表达式是.NET框架中用于处理文本模式匹配和数据提取的强大工具。它基于Perl风格的正则表达式,允许程序员通过简洁的语法来执行复杂的文本操作。本专题学习将深入探讨C#正则表达式的使用,帮助开发者更好地理解...

Global site tag (gtag.js) - Google Analytics