NET抓取和分析网页的类

合集下载

如何抓取网页数据,以抓取安居客举例

如何抓取网页数据,以抓取安居客举例

如何抓取网页数据,以抓取安居客举例互联网时代,网页上有丰富的数据资源。

我们在工作项目、学习过程或者学术研究等情况下,往往需要大量数据的支持。

那么,该如何抓取这些所需的网页数据呢?对于有编程基础的同学而言,可以写个爬虫程序,抓取网页数据。

对于没有编程基础的同学而言,可以选择一款合适的爬虫工具,来抓取网页数据。

高度增长的抓取网页数据需求,推动了爬虫工具这一市场的成型与繁荣。

目前,市面上有诸多爬虫工具可供选择(八爪鱼、集搜客、火车头、神箭手、造数等)。

每个爬虫工具功能、定位、适宜人群不尽相同,大家可按需选择。

本文使用的是操作简单、功能强大的八爪鱼采集器。

以下是一个使用八爪鱼抓取网页数据的完整示例。

示例中采集的是安居客-深圳-新房-全部楼盘的数据。

采集网站:https:///loupan/all/p2/步骤1:创建采集任务1)进入主界面,选择“自定义模式”如何抓取网页数据,以抓取安居客举例图1 2)将要采集的网址复制粘贴到网站输入框中,点击“保存网址”如何抓取网页数据,以抓取安居客举例图2步骤2:创建翻页循环1)在页面右上角,打开“流程”,以展现出“流程设计器”和“定制当前操作”两个板块。

将页面下拉到底部,点击“下一页”按钮,在右侧的操作提示框中,选择“循环点击下一页”,以建立一个翻页循环如何抓取网页数据,以抓取安居客举例图3步骤3:创建列表循环并提取数据1)移动鼠标,选中页面里的第一个楼盘信息区块。

系统会识别此区块中的子元素,在操作提示框中,选择“选中子元素”如何抓取网页数据,以抓取安居客举例图42)系统会自动识别出页面中的其他同类元素,在操作提示框中,选择“选中全部”,以建立一个列表循环如何抓取网页数据,以抓取安居客举例图53)我们可以看到,页面中楼盘信息区块里的所有元素均被选中,变为绿色。

右侧操作提示框中,出现字段预览表,将鼠标移到表头,点击垃圾桶图标,可删除不需要的字段。

字段选择完成后,选择“采集以下数据”如何抓取网页数据,以抓取安居客举例图54)字段选择完成后,选中相应的字段,可以进行字段的自定义命名。

基于网络爬虫的信息抓取与分析技术研究

基于网络爬虫的信息抓取与分析技术研究

基于网络爬虫的信息抓取与分析技术研究近年来,随着互联网的普及和技术的发展,信息量呈现几何级数的增长。

如何从庞杂的数据中精确地提取有用的信息,成为了亟待解决的问题。

为此,基于网络爬虫的信息抓取与分析技术应运而生。

本文将重点探讨该技术在实际应用中的研究与发展。

网络爬虫是一种自动化程序,通过模拟用户在互联网上的浏览,收集并提取各类信息。

基于网络爬虫的信息抓取与分析技术,通过使用爬虫工具,从互联网上获取数据,并对数据进行清洗、处理和分析,以发现其中的规律和价值。

要进行信息抓取与分析,首先需要明确目标。

例如,想要获取某个特定话题的新闻报道,可以通过设定关键词来获得相关的新闻网页,并通过爬虫工具收集数据。

然后,对收集到的数据进行初步处理,去除噪声、重复等无用信息,保留有用的文本、图片等内容。

接下来,可以利用文本挖掘、机器学习等技术对数据进行进一步的分析。

信息抓取与分析的技术工具有很多,其中最常用的是Python语言中的Scrapy框架。

Scrapy框架提供了强大的爬取工具和丰富的数据处理能力,可以方便地进行数据获取和清洗。

通过Scrapy框架,可以简洁高效地实现网页内容的自动化采集和提取。

在进行信息抓取时,需要注意合法、合规的原则。

合法地获取数据可以避免侵犯他人的权益,同时也可以减少风险和法律纠纷的潜在危险。

因此,在使用网络爬虫进行信息抓取时,应该尊重网站的规则和政策,遵循robots.txt协议等。

信息抓取与分析技术主要包括数据清洗、数据处理和数据分析三个步骤。

在数据清洗过程中,需要对原始数据进行去重、去除噪声和无效字符等操作,使得数据质量得到提高。

数据处理过程中,可以利用文本挖掘、自然语言处理等技术将数据转换为结构化信息。

数据分析阶段,则通过数据挖掘、机器学习、统计分析等方法,对数据进行更深入的探索和挖掘,以发现其中的潜在价值和规律。

基于网络爬虫的信息抓取与分析技术的应用广泛。

在新闻媒体行业中,可以通过抓取新闻网站上的报道,进行舆情分析和热点预测。

网络数据采集与分析的技术方法

网络数据采集与分析的技术方法

网络数据采集与分析的技术方法随着互联网的普及和发展,网络数据采集与分析也成为了一个非常重要的技术领域。

网络数据采集与分析技术的主要目标就是从网络上获取数据,并对这些数据进行分析处理,以便提供有关信息的决策依据。

本文将介绍网络数据采集与分析的技术方法和应用场景。

一、网络数据采集方法1、网页抓取技术网页抓取技术是一种可以自动抓取网页上的信息的方法。

这种技术可以让用户通过指定关键字或者URL的方式,抓取指定的网页上的信息,并将其转化为结构化的数据。

网页抓取技术可以用于创建新闻聚合网站、产品价格比较网站、社交媒体监测系统等应用。

2、API接口获取数据API(Application Programming Interface)是一种用于获取特定数据的接口。

这种技术可以通过已经定义好的API来获取需要的数据。

API可以获取各种类型的数据,包括文本、图片、音频和视频等。

API接口获取数据可以用于创建社交媒体应用、在线零售平台、移动应用程序等应用。

3、爬虫技术爬虫技术是一种可以自动收集特定数据的技术。

爬虫可以使用搜索引擎的API和互联网上公开的爬虫工具等方式获取数据。

爬虫技术可以用于收集数据,如获取比特币价格、采集新闻文章等。

二、网络数据分析方法1、文本分析文本分析是一种用于将文本转换为可处理的结构化数据的方法。

这种方法可以将文本转换为主题、情感等方面的数据,并进行分析。

文本分析可以用于数据挖掘、社交媒体监测、品牌声誉分析等应用。

2、数据挖掘数据挖掘是一种用于探索和分析数据的方法。

数据挖掘的目标是发现结构、角色、关系和模式等隐藏在数据背后的信息。

数据挖掘可以用于推荐系统、客户细分、诈骗检测、市场预测等应用。

3、机器学习机器学习是一种基于统计学、人工智能和计算机科学的技术,它可以自动改善和提升算法的性能。

这种技术可以从数据中学习,从而自动进行分类和预测。

机器学习可以用于自然语言处理、图像识别、医疗诊断等应用。

三、网络数据采集和分析应用1、社交媒体监测社交媒体监测是一种用于监测社交媒体上的品牌、产品、竞争对手和消费者的方法。

网络爬虫技术3篇

网络爬虫技术3篇

网络爬虫技术第一篇:网络爬虫技术介绍网络爬虫技术是从网络上自动获取信息的一种技术,也叫做网页抓取或者网络蜘蛛。

它是一个自动地通过互联网采集网络数据的程序。

网络爬虫技术是搜索引擎的关键技术之一。

搜索引擎的底层就是一系列爬虫,通过爬虫从万维网上收集信息,然后通过算法对这些信息进行分析、处理、归类、排序等操作,最后呈现给用户。

网络爬虫技术的原理是模拟客户端向服务器发起请求,从而获取网络信息,并根据特定的规则,抓取需要的内容,保存到自己的数据库中。

网络爬虫技术的应用非常广泛,可以用于搜索引擎、数据挖掘、价格比较、信息监控等领域。

其中,搜索引擎应用最为广泛。

搜索引擎需要在短时间内从互联网上获取大量的网页,并对这些网页进行处理,将其中的信息提取出来,进行组织、处理、归纳、分析、挖掘,最终返回给用户。

为了避免网络爬虫造成的网站负荷和数据安全问题,很多网站会通过技术手段来限制网络爬虫的访问。

一些常用的限制手段包括:robots.txt文件、访问频率限制、验证码验证,以及反爬虫策略,如IP封锁、JS反爬虫等。

网络爬虫技术不仅有着广泛的应用范围,而且也有着复杂的技术要求。

爬虫涉及到的技术领域非常广泛,包括但不限于:Java开发、Python编程、分布式计算、数据库管理、网络安全等。

同时,最为关键的是对抓取的数据进行分析,得出有效的信息,这需要掌握一定的数据分析技能。

网络爬虫技术的出现,使得人们可以更加方便地获取互联网上的信息,提高了互联网信息的利用价值。

然而,随着人们对网络爬虫技术的使用,也引发了一系列的争议,包括隐私问题、版权问题、以及对于商业利用的限制问题。

总之,网络爬虫技术是互联网信息采集处理与利用的关键技术。

随着人们对它的需求日益增加,未来网络爬虫技术将会得到进一步的发展和应用。

第二篇:网络爬虫技术的发展与挑战网络爬虫技术自20世纪90年代发展以来,一直在不断地发展和创新。

一方面,随着互联网的快速发展和互联网用户行为方式的不断演进,网络爬虫的使用也不断发展出各种新的应用形态;另一方面,各种阻挡网络爬虫的技术和策略也不断更新,对爬虫技术提出了新的挑战。

netmap 使用方法

netmap 使用方法

netmap 使用方法Netmap 是一种高性能的网络数据包框架,它提供了一套用于网络流量分析和处理的工具。

本文将介绍 Netmap 的使用方法,帮助读者了解如何使用 Netmap 进行网络数据包的抓取和处理。

一、Netmap 简介Netmap 是一个开源项目,旨在提供高性能的网络数据包处理。

它通过在内核和用户空间之间共享缓冲区,实现了零拷贝的数据包传输。

Netmap 可以在多种操作系统上运行,并且支持多种网络接口。

二、安装 Netmap我们需要下载和编译 Netmap。

可以在 Netmap 的官方网站上找到最新的源代码,并按照官方文档中的步骤进行编译和安装。

三、使用 Netmap 抓取数据包1. 打开终端,并进入 Netmap 的安装目录。

2. 使用以下命令启动 Netmap 的数据包抓取功能:$ ./pkt-gen -i netmap:eth0 -f rx这个命令将在 eth0 网络接口上启动数据包抓取,并将抓取的数据包输出到终端。

四、使用 Netmap 分析数据包1. 打开终端,并进入 Netmap 的安装目录。

2. 使用以下命令启动 Netmap 的数据包分析功能:$ ./pkt-gen -i netmap:eth0 -f tx这个命令将在 eth0 网络接口上启动数据包分析,并将分析结果输出到终端。

五、使用 Netmap 进行数据包处理1. 打开终端,并进入 Netmap 的安装目录。

2. 使用以下命令启动 Netmap 的数据包处理功能:$ ./pkt-gen -i netmap:eth0 -f fwd这个命令将在 eth0 网络接口上启动数据包处理,并将处理后的数据包转发到其他网络接口。

六、Netmap 的高级功能除了基本的数据包抓取、分析和处理功能,Netmap 还提供了一些高级功能,例如:1. 虚拟化支持:Netmap 可以在虚拟化环境中运行,并支持多个虚拟机之间的数据包传输。

网络信息收集的原理

网络信息收集的原理

网络信息收集的原理
网络信息收集的原理是利用网络上的公开信息资源来获取目标信息。

主要原理包括以下几点:
1. 网络抓取:通过网络爬虫程序自动抓取互联网上的目标网站页面,获取网页的HTML源代码。

2. 数据清洗:对抓取到的HTML源代码进行解析和清洗,提取出需要的信息,如标题、内容、链接等。

3. 数据存储:将清洗后的数据存储到数据库或文件中,以便后续的分析和处理。

4. 数据关联:将不同网页中的相关信息进行关联,建立起信息的连接关系。

5. 数据分析:对存储的数据进行分析和挖掘,发现其中的规律和趋势。

6. 数据可视化:将分析结果以图表、报表等形式进行展示,便于用户查看和理解。

值得注意的是,网络信息收集的过程中应遵守相关法律法规和道德规范,不能侵犯他人的隐私、知识产权等权益。

此外,也需尊重网站的robots.txt 文件,遵
守网站的访问规则和限制。

asp.net获取当前网址url的各种属性(文件名、参数、域名等)的代码

asp.net获取当前网址url的各种属性(文件名、参数、域名等)的代码

获取当前⽹址url的各种属性(⽂件名、参数、域名等)的代码复制代码代码如下:string url=Request.Url.ToString();url= https:///aaa/bbb.aspx?id=5&name=kelli【2】获取站点名+页⾯名+参数:复制代码代码如下:string url=Request.RawUrl;(或 string url=Request.Url.PathAndQuery;)url= /aaa/bbb.aspx?id=5&name=kelli【3】获取站点名+页⾯名:复制代码代码如下:string url=HttpContext.Current.Request.Url.AbsolutePath;(或 string url= HttpContext.Current.Request.Path;)url= aaa/bbb.aspx【4】获取域名:复制代码代码如下:string url=HttpContext.Current.Request.Url.Host;url= 【5】获取参数:复制代码代码如下:string url= HttpContext.Current.Request.Url.Query;url= ?id=5&name=kelli复制代码代码如下:Request.RawUrl:获取客户端请求的URL信息(不包括主机和端⼝)------>/Default2.aspxRequest.ApplicationPath:获取服务器上应⽤程序的虚拟路径。

------>/Request.CurrentExecutionFilePath:获取当前请求的虚拟路径。

------>/Default2.aspxRequest.Path:获取当前请求的虚拟路径。

------>/Default2.aspxRequest.PathInfo:取具有URL扩展名的资源的附加路径信息------>Request.PhysicalPath:获取与请求的URL相对应的物理⽂件系统路径。

网络爬虫原理

网络爬虫原理

网络爬虫原理网络爬虫是一种自动化的程序,用于浏览互联网上的网页并提取数据。

它通过模拟人类的浏览行为,自动化地访问网页、获取页面内容并分析页面结构。

网络爬虫的工作原理可以简单概括为以下几个步骤:1. 定义起始URL:爬虫首先需要指定一个或多个起始URL,作为开始抓取的入口点。

2. 发送HTTP请求:爬虫使用HTTP协议向服务器发送请求,获取页面内容。

请求可以包含一些额外的信息,如用户代理标识、请求头等。

3. 获取页面内容:服务器响应请求后,爬虫会接收到页面的内容。

这些内容可以是HTML、XML、JSON等不同的格式。

4. 解析页面:爬虫会解析页面内容,并提取出需要的数据。

解析可以使用各种技术,如正则表达式、XPath、CSS选择器等。

5. 存储数据:爬虫会将提取到的数据存储到本地或数据库中。

存储方式可以根据需求选择,如文本文件、CSV文件、数据库等。

6. 获取下一个URL:在解析页面的过程中,爬虫会寻找页面中的链接,并将这些链接作为下一次请求的URL。

这样,爬虫就可以不断地遍历网页,抓取更多的数据。

7. 重复以上步骤:爬虫会不断地重复以上步骤,直到满足停止条件。

停止条件可以是已抓取的页面数量达到设定值,或达到了某个特定的页面,或达到了一定的时间等。

需要注意的是,网络爬虫在爬取网页时需要遵守一些法律和道德规范。

爬虫应该尊重网站的Robots.txt文件中的规则,避免对不允许爬取的页面进行访问。

此外,爬虫也应该遵守网站的访问频率限制,避免给服务器带来过大的负担。

总之,网络爬虫是一种自动化工具,通过模拟人类的浏览行为抓取网页,然后解析页面提取数据。

它可以帮助我们快速地获取大量的数据,并进行进一步的处理和分析。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主要功能有:1、提取网页的纯文本,去所有html标签和javascript代码2、提取网页的链接,包括href和frame及iframe3、提取网页的title等(其它的标签可依此类推,正则是一样的)4、可以实现简单的表单提交及cookie保存第一部分using System;using System.Data;using System.Configuration;using ;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 Diction ary<string, CookieContainer>();//存放所有网页的Cookieprivate 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.Ig noreCase);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>纯文本</returns>private string getFirstNchar(string instr, int firstN, bool withLink){if (m_outstr == ""){m_outstr = instr.Clone() as string;m_outstr = new Regex(@"(?m)<script[^>]*>(\w|\W)*?</script[^>]*>", R egexOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, "");m_outstr = new Regex(@"(?m)<style[^>]*>(\w|\W)*?</style[^>]*>", Reg exOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, "");m_outstr = new Regex(@"(?m)<select[^>]*>(\w|\W)*?</select[^>]*>", R egexOptions.Multiline | RegexOptions.IgnoreCase ).Replace(m_outstr, "");if (!withLink) m_outstr = new Regex(@"(?m)<a[^>]*>(\w|\W)*?</a[^>]* >", RegexOptions.Multiline | RegexOptions.IgnoreCase).Replace(m_outstr, ""); Regex objReg = new System.Text.RegularExpressions.Regex("(<[^>]+?>) |&nbsp;", RegexOptions.Multiline | RegexOptions.IgnoreCase);m_outstr = objReg.Replace(m_outstr, "");Regex objReg2 = new System.Text.RegularExpressions.Regex("(\\s)+", RegexOptions.Multiline | RegexOptions.IgnoreCase);m_outstr = objReg2.Replace(m_outstr, " ");}return m_outstr.Length > firstN ? m_outstr.Substring(0, firstN) : m_out str;}/// <summary>/// 此私有方法返回一个IP地址对应的无符号整数/// </summary>/// <param name="x">IP地址</param>/// <returns></returns>private uint getuintFromIP(IPAddress x){Byte[] bt = x.GetAddressBytes();uint i = (uint)(bt[0] * 256 * 256 * 256);i += (uint)(bt[1] * 256 * 256);i += (uint)(bt[2] * 256);i += (uint)(bt[3]);return i;}#endregion#region 公有文法/// <summary>/// 此公有方法提取网页中一定字数的纯文本,包括链接文字/// </summary>/// <param name="firstN">字数</param>/// <returns></returns>public string getContext(int firstN){return getFirstNchar(m_html, firstN, true);}/// <summary>/// 此公有方法提取网页中一定字数的纯文本,不包括链接文字/// </summary>/// <param name="firstN"></param>/// <returns></returns>public string getContextWithOutLink(int firstN){return getFirstNchar(m_html, firstN, false);}/// <summary>/// 此公有方法从本网页的链接中提取一定数量的链接,该链接的URL满足某正则式 /// </summary>/// <param name="pattern">正则式</param>/// <param name="count">返回的链接的个数</param>/// <returns>List<Link></returns>public List<Link> getSpecialLinksByUrl(string pattern,int count){if(m_links.Count==0)getLinks();List<Link> SpecialLinks = new List<Link>();List<Link>.Enumerator i;i = m_links.GetEnumerator();int cnt = 0;while (i.MoveNext() && cnt<count){if (new Regex(pattern, RegexOptions.Multiline | RegexOptions.Ignore Case ).Match(i.Current.url).Success){SpecialLinks.Add(i.Current);cnt++;}}return SpecialLinks;}/// <summary>/// 此公有方法从本网页的链接中提取一定数量的链接,该链接的文字满足某正则式/// </summary>/// <param name="pattern">正则式</param>/// <param name="count">返回的链接的个数</param>/// <returns>List<Link></returns>public List<Link> getSpecialLinksByText(string pattern,int count){if (m_links.Count == 0) getLinks();List<Link> SpecialLinks = new List<Link>();List<Link>.Enumerator i;i = m_links.GetEnumerator();int cnt = 0;while (i.MoveNext() && cnt < count){if (new Regex(pattern, RegexOptions.Multiline | RegexOptions.Ignore Case ).Match(i.Current.text).Success){SpecialLinks.Add(i.Current);cnt++;}}return SpecialLinks;}/// <summary>/// 此公有方法获得所有链接中在一定IP范围的链接/// </summary>/// <param name="_ip_start">起始IP</param>/// <param name="_ip_end">终止IP</param>/// <returns></returns>public List<Link> getSpecialLinksByIP(string _ip_start, string _ip_end){IPAddress ip_start = IPAddress.Parse(_ip_start);IPAddress ip_end = IPAddress.Parse(_ip_end);if (m_links.Count == 0) getLinks();List<Link> SpecialLinks = new List<Link>();List<Link>.Enumerator i;i = m_links.GetEnumerator();while (i.MoveNext()){IPAddress ip;try{ip = Dns.GetHostEntry(new Uri(i.Current.url).Host).AddressList[ 0];}catch { continue; }if(getuintFromIP(ip)>=getuintFromIP(ip_start) && getuintFromIP(ip)< =getuintFromIP(ip_end)){SpecialLinks.Add(i.Current);}}return SpecialLinks;}/// <summary>/// 这公有方法提取本网页的纯文本中满足某正则式的文字/// </summary>/// <param name="pattern">正则式</param>/// <returns>返回文字</returns>public string getSpecialWords(string pattern){if (m_outstr == "") getContext(Int16.MaxValue);Regex regex = new Regex(pattern, RegexOptions.Multiline | RegexOptions. IgnoreCase );Match mc=regex.Match(m_outstr);if (mc.Success)return mc.Groups[1].Value;return string.Empty;}#endregion#region 构造函数private void Init(string _url){try{m_uri = new Uri(_url);m_links = new List<Link>();m_html = "";m_outstr = "";m_title = "";m_good = true;if (_url.EndsWith(".rar") || _url.EndsWith(".dat") || _url.EndsWith (".msi")){m_good = false;return;}HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(m_uri);rqst.AllowAutoRedirect = true;rqst.MaximumAutomaticRedirections = 3;erAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";rqst.KeepAlive = true;rqst.Timeout = 30000;lock (WebPage.webcookies){if (WebPage.webcookies.ContainsKey(m_uri.Host))rqst.CookieContainer = WebPage.webcookies[m_uri.Host];else{CookieContainer cc = new CookieContainer();WebPage.webcookies[m_uri.Host] = cc;rqst.CookieContainer = cc;}}HttpWebResponse rsps = (HttpWebResponse)rqst.GetResponse();Stream sm = rsps.GetResponseStream();if (!rsps.ContentType.ToLower().StartsWith("text/") || rsps.Content Length > 1 << 22){rsps.Close();m_good = false;return;}Encoding cding = System.Text.Encoding.Default;string contenttype=rsps.ContentType.ToLower();int ix = contenttype.IndexOf("charset=");if (ix != -1){try{cding = System.Text.Encoding.GetEncoding(rsps.ContentType.S ubstring(ix + "charset".Length + 1));}catch{cding = Encoding.Default;}m_html = new StreamReader(sm, cding).ReadToEnd();}else{m_html = new StreamReader(sm, cding).ReadToEnd();Regex regex = new Regex("charset=(?<cding>[^=]+)?\"",RegexOptio ns.IgnoreCase);string strcding = regex.Match(m_html).Groups["cding"].Value; try{cding = Encoding.GetEncoding(strcding);}catch{cding = Encoding.Default;}byte[] bytes=Encoding.Default.GetBytes(m_html.ToCharArray()); m_html = cding.GetString(bytes);if (m_html.Split('?').Length > 100){m_html=Encoding.Default.GetString(bytes);}}m_pagesize = m_html.Length;m_uri = rsps.ResponseUri;rsps.Close();}catch (Exception ex){Console.WriteLine(ex.Message+m_uri.ToString());m_good = false;}}第二部分public WebPage(string _url){string uurl = "";try{uurl = Uri.UnescapeDataString(_url);_url = uurl;}catch { };Regex re = new Regex("(?<h>[^\x00-\xff]+)");Match mc = re.Match(_url);if (mc.Success){string han = mc.Groups["h"].Value;_url = _url.Replace(han, System.Web.HttpUtility.UrlEncode(han, Enco ding.GetEncoding("GB2312")));}Init(_url);}public WebPage(string _url, string _loginurl, string _post){string uurl = "";try{uurl = Uri.UnescapeDataString(_url);_url = uurl;}catch { };Regex re = new Regex("(?<h>[^\x00-\xff]+)");Match mc = re.Match(_url);if (mc.Success){string han = mc.Groups["h"].Value;_url = _url.Replace(han, System.Web.HttpUtility.UrlEncode(han, Enco ding.GetEncoding("GB2312")));}if (_loginurl.Trim() == "" || _post.Trim() == "" || WebPage.webcookies. ContainsKey(new Uri(_url).Host)){Init(_url);}else{#region 登陆string indata = _post;m_post = _post;m_loginurl = _loginurl;byte[] bytes = Encoding.Default.GetBytes(_post);CookieContainer myCookieContainer = new CookieContainer();try{//新建一个CookieContainer来存放Cookie集合HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Cr eate(_loginurl);//新建一个HttpWebRequestmyHttpWebRequest.ContentType = "application/x-www-form-urlencod ed";myHttpWebRequest.AllowAutoRedirect = false;erAgent = "Mozilla/4.0 (compatible; MSIE 5.0 1; Windows NT 5.0)";myHttpWebRequest.Timeout = 60000;myHttpWebRequest.KeepAlive = true;myHttpWebRequest.ContentLength = bytes.Length;myHttpWebRequest.Method = "POST";myHttpWebRequest.CookieContainer = myCookieContainer;//设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainerStream myRequestStream = myHttpWebRequest.GetRequestStream(); myRequestStream.Write(bytes, 0, bytes.Length);myRequestStream.Close();HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebR equest.GetResponse();foreach (Cookie ck in myHttpWebResponse.Cookies){myCookieContainer.Add(ck);}myHttpWebResponse.Close();}catch{Init(_url);return;}#endregion#region 登陆后再访问页面try{m_uri = new Uri(_url);m_links = new List<Link>();m_html = "";m_outstr = "";m_title = "";m_good = true;if (_url.EndsWith(".rar") || _url.EndsWith(".dat") || _url.Ends With(".msi")){m_good = false;return;}HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(m_uri); rqst.AllowAutoRedirect = true;rqst.MaximumAutomaticRedirections = 3;erAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows N T 5.0)";rqst.KeepAlive = true;rqst.Timeout = 30000;rqst.CookieContainer = myCookieContainer;lock (WebPage.webcookies){WebPage.webcookies[m_uri.Host] = myCookieContainer;}HttpWebResponse rsps = (HttpWebResponse)rqst.GetResponse();Stream sm = rsps.GetResponseStream();if (!rsps.ContentType.ToLower().StartsWith("text/") || rsps.Con tentLength > 1 << 22){rsps.Close();m_good = false;return;}Encoding cding = System.Text.Encoding.Default;int ix = rsps.ContentType.ToLower().IndexOf("charset=");if (ix != -1){try{cding = System.Text.Encoding.GetEncoding(rsps.ContentType.Substring(ix + "charset".Length + 1));}catch{cding = Encoding.Default;}}m_html = new StreamReader(sm, cding).ReadToEnd();m_pagesize = m_html.Length;m_uri = rsps.ResponseUri;rsps.Close();}catch (Exception ex){Console.WriteLine(ex.Message+m_uri.ToString()); m_good = false;}#endregion}}#endregion#region 属性/// <summary>/// 通过此属性可获得本网页的网址,只读/// </summary>public string URL{get{return m_uri.AbsoluteUri;}}/// <summary>/// 通过此属性可获得本网页的标题,只读public string Title{get{if (m_title == ""){Regex reg = new Regex(@"(?m)<title[^>]*>(?<title>(?:\w|\W)*?)</ title[^>]*>", RegexOptions.Multiline | RegexOptions.IgnoreCase );Match mc = reg.Match(m_html);if (mc.Success)m_title= mc.Groups["title"].Value.Trim();}return m_title;}}/// <summary>/// 此属性获得本网页的所有链接信息,只读/// </summary>public List<Link> Links{get{if (m_links.Count == 0) getLinks();return m_links;}}/// <summary>/// 此属性返回本网页的全部纯文本信息,只读/// </summary>public string Context{get{if (m_outstr == "") getContext(Int16.MaxValue);return m_outstr;}}/// <summary>/// 此属性获得本网页的大小public int PageSize{get{return m_pagesize;}}/// <summary>/// 此属性获得本网页的所有站内链接/// </summary>public List<Link> InsiteLinks{get{return getSpecialLinksByUrl("^http://"+m_uri.Host,Int16.MaxValue); }}/// <summary>/// 此属性表示本网页是否可用/// </summary>public bool IsGood{get{return m_good;}}/// <summary>/// 此属性表示网页的所在的网站/// </summary>public string Host{get{return m_uri.Host;}}/// <summary>/// 此网页的登陆页所需的POST数据/// </summary>public string PostStr{get{return m_post;}}/// <summary>/// 此网页的登陆页/// </summary>public string LoginURL{get{return m_loginurl;}}#endregion}/// <summary>/// 链接类/// </summary>public class Link{public string url; //链接网址public string text; //链接文字public Link(string _url, string _text) {url = _url;text = _text;}}。

相关文档
最新文档