设为首页
给我留言
首页       关于蓬缘    克隆建站    模版建站    建站流程    建站疑虑    支付方式    网站推广    网站优化    建站学院    联系我们    
蓬缘网络技术工作室真心为您服务!霸州网站建设 + 霸州网页设计 + 霸州企业建站 + 霸州FLASH设计 + 霸州网站开发 + 平面设计,专业技术人员一对一服务让建站更加专业更加放心……二十四小时服务热线: 15932615201 13810319167。欢迎来电咨询……霸州网站建设工作室|霸州网站制作|霸州建站|霸州网站改版|霸州企业建站|霸州专业建站|蓬缘网络技术工作室 - 我要网站 - http://www.woyaowangzhan.com……霸州蓬缘网络技术工作室是专业的建站团队,提供专业的霸州建站服务:1、霸州专业网站建设(霸州网站设计)2、霸州网站推广(百度、Google、搜狐、阿里巴巴等)3、霸州网站优化(SEO、百度推广优化)4、霸州域名注册(.com/.cn/.net等)5、霸州虚拟主机(ASP、.net等)6、霸州政府建站7、霸州门户网站…… 现在时间是
建站学堂
 
用HttpWebRequest和正则表达式提取网页中的链接
[ 2008-7-24 8:54:00 ] 作者: 来源:

  核心提示:...

提取网页链接有什么用?比如,你可以做网页地址搜集器,邮件地址搜集器,图片或Flash搜集器等等。如何用最高效快捷的方式提取网页中的链接地址,这正是本文所要探讨的。

提 取网页链接地址有多种方式。在VS.NET开发环境下,总的是通过两种方式:
   一.用AxWebBrowser控件。等网页加载完,然后提取其中的链接。
   二.不用AxWebBrowser控件的方式,先取得网页源代码,然后提取其中的链接。
   本人早先是用第一种方式,第一种方式要先等网页加载完毕,浏览器会下载许多无关的内容,速度较慢。因此,推荐用本文介绍的方式,用HttpWebRequest结合正则表达式取得网页中的链接。
   本文分以下几个步骤:
   用HttpWebRequest取得网页源代码
   用正则表达式取得链接地址
   去除重复地址
   保存为XML
用HttpWebRequest取得网页源代码

Dim url As String=“ http://www.Tuenhai.com “ “ 这是tuenhai的小站,有空来坐坐
Dim httpReq As System.Net.HttpWebRequest  
Dim httpResp As System.Net.HttpWebResponse
Dim httpURL As New System.Uri(url)
httpReq = CType(WebRequest.Create(httpURL), HttpWebRequest)
httpReq.Method = “GET“
httpResp = CType(httpReq.GetResponse(), HttpWebResponse)
httpReq.KeepAlive = False “ 获取或设置一个值,该值指示是否与 Internet 资源建立持久连接。
Dim reader As StreamReader = _
New StreamReader(httpResp.GetResponseStream, System.Text.Encoding.GetEncoding(“GB2312“))
Dim respHTML As String = reader.ReadToEnd() “respHTML就是网页源代码

  是不是很简单?
   对于概念的理解,在MSDN中有极详细的介绍,请在VS.NET 2003中点击“帮助”,再点击“搜索”,然后输入类名,如HttpWebRequest,一回车,就什么资料都有了。对于下面碰到的编程概念,如有不理解的,也请先搜索MSDN,不再重复说明。

用正则表达式取得链接地址
Dim strRegex As String = “http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?“ “这就是表达式
Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.MatchCollection
r = New System.Text.RegularExpressions.Regex(strRegex, System.Text.RegularExpressions.RegexOptions.IgnoreCase)   
m = r.Matches(respHTML)
Dim i As Integer
For i = 0 To m.Count - 1
     form1.DefInstance.ListBox1.Items.Add(m(i).Value) “form1.DefInstance是form1的共享属性和实例
Next i  
form1.DefInstance.ListBox.Visible = True “ 设置ListBox为可见
form1.DefInstance.ListBox.Sorted = True “ 对ListBox各元素进行排序

form1.DefInstance.ListBox1.Items.Add(m(i).Value) “form1.DefInstance是form1的共享属性和实例, 共享成员如果是方法或属性,tuenhai们不用创建实例就可以直接用‘类名 .共享成员“的方法进行调用。设置方法如下:
Private Shared m_vb6FormDefInstance As form1
Public Shared Property DefInstance() As form1
   Get
     If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then “判断窗体实例是否存在
       m_vb6FormDefInstance = New form1
     End If
     DefInstance = m_vb6FormDefInstance
   End Get
   Set(ByVal Value As form1)
     m_vb6FormDefInstance = Value
   End Set
End Property



去除重复地址

Dim countForms As Integer “以下代码去除重复地址
Dim lstForms() As String
Dim CurId As Integer
With formBrow.DefInstance.ListBox1
   ReDim Preserve lstForms(0)
   lstForms(0) = .Items(0) “新数组的第一项和list的第一项相同
   For countForms = 1 To .Items.Count - 1 “items.count得到list1中的项目数
     CurId = UBound(lstForms) “curid为newlist中有项目数
     If .Items(countForms) <> lstForms(CurId) Then “如果旧表第二项不等于新表最大项
       ReDim Preserve lstForms(CurId + 1) “定位到新表第二项
       lstForms(CurId + 1) = .Items(countForms) “新表第二项等于旧表第二项
     End If
   Next countForms
   .Ite ms.Clear() “删除旧表所有项
   For countForms = 0 To UBound(lstForms) “把新表写入旧表
     .Items.Add(lstForms(countForms))
   Next countForms
End With


            把地址导出为XML
可扩展标记语言 (XML) 是一种提供数据描述格式的标记语言。该语言使跨越多个平台进行更准确的内容声明和获得更有意义的搜索结果变得更加容易。此外,XML 实现了表示与数据的分离。例如,在 HTML 中,使用标记来告诉浏览器将数据显示为粗体或斜体;而在 XML 中,标记只用于描述数据,例如城市名、温度和大气压。在 XML 中,使用样式表(例如,可扩展样式表语言 (XSL) 和层叠样式表 (CSS))在浏览器中显示数据。XML 使数据与表示及处理分离开来,通过应用不同的样式表和应用程序,使您能够根据需要显示和处理数据。
  XML 是为在 Web 上传送而进行优化了的 SGML 的子集。它是由万维网联合会 (W3C) 定义的。该标准化确保了结构化数据的统一性和相对于应用或供应商的独立性。
  XML 是 Visual Studio .NET 和 .NET Framework 的很多功能的核心。XML 是可用于许多不同应用程序的格式,tuenhai们可将搜集到的链接保存为XML。
XmlTextWriter 是 XmlWriter 类的实现,该类提供将 XML 写入文件、流或 TextWriter 的 API。该类有许多验证和检查规则,以确保所编写的 XML 的格式正确。当与某些规则发生冲突时,将会引发异常,并且这些异常应该被捕获。XmlTextWriter 有不同的构造函数,每个函数指定写入 XML 数据的不同类型的位置。下面代码使用的是将 XML 写入文件的构造函数。
   首先使用 Formatting 属性指定正被编写的 XML 数据的格式。通过将此属性设置为 Indented,编写器使用 Indentation 和 IndentChar 属性缩进子元素。
   代码显示了与每个 XML 节点类型相对应的 XML 编写方法。例如,编写一个元素将调用 WriteElementString 方法,编写一个属性将调用 WriteAttributeString 方法。对于嵌套级别,可以使用 WriteStartElement/WriteEndElement 对;如果要创建较复杂的属性,则可以使用 WriteStartAttribute/WriteEndAttribute 对。
请注意代码如何使用 WriteStartDocument 方法编写带版本号“1.0”的 XML 声明。如果要让编写器检查该文档的格式是否正确(先是 XML 声明,序言中的 DOCTYPE,只有一个根级别元素,等等),您必须在调用任何其他编写方法之前,调用此可选的 WriteStartDocument 方法。接着,此代码调用 WriteDocType 方法编写名为“urls”的文档类型。WriteDocType 调用中的第三个参数指定编写器将编写 SYSTEM“urls.dtd”。编写完成后,XML 文件指示有一个要根据其进行验证的外部 DTD。
  最后,代码调用 Flush 方法将 XML 数据保存到文件,然后才调用 Close 方法。(虽然此示例确实只需要 Close 方法,但是也存在这样的情况,即需要保存所生成的 XML,并且需要重复使用编写器。)
  要检查 XmlTextWriter 的输出,可通过用 XmlTextReader 读取生成的文件来执行往返测试,以验证 XML 的格式是正确的。
Private Sub saveXml()
   Dim saveFileDialog1 As New SaveFileDialog
   saveFileDialog1.Filter = “xml|*.xml“
   saveFileDialog1.Title = “Save a xml File“
   saveFileDialog1.ShowDialog()
   If saveFileDialog1.FileName <> ““ Then  “如果文件名不等于空白
     Dim fileName As String = saveFileDialog1.FileName  
     If Not System.IO.File.Exists(fileName) Then  “如果不存在同名文件
      Dim myXmlTextWriter As XmlTextWriter = New XmlTextWriter(fileName, Nothing)
       myXmlTextWriter.Formatting = System.Xml.Formatting.Indented  “设置缩进
       myXmlTextWriter.WriteStartDocument(False)
       myXmlTextWriter.WriteDocType(“urls“, Nothing, “urls.dtd“, Nothing)
       myXmlTextWriter.WriteComment(“This file save the Urls“)  “注释
       myXmlTextWriter.WriteStartElement(“urls“)      “开始元素
       myXmlTextWriter.WriteStartElement(“url1“, Nothing)  “开始元素
       myXmlTextWriter.WriteAttributeString(“now“, Now)   “在属性里记录时间
       For countAll As Integer = 0 To ListBox1.Items.Count - 1
         Dim title As String = Strings.Right(ListBox1.Items.Item(countAll), 3)  “取URL后三字
         Dim body As String = lstMuLu.Items.Item(countAll)       
         myXmlTextWriter.WriteElementString(title, Nothing, body)
       Next
       myXmlTextWriter.WriteEndElement()   
       myXmlTextWriter.WriteEndElement()
      “Write the XML to file and close the myXmlTextWriter
       myXmlTextWriter.Flush()
       myXmlTextWriter.Close()
     End  If
   End If
End Sub



 
   建站学堂
  ●  ASP编程技术
  ●  PHP编程技术
  ●  JSP编辑技术
  ●  ASP.NET编程技术
  ●  JAVA软件开发
  ●  C#软件开发
  ●  VB.NET软件开发
   网站推广与营销
  ● 网站备案的9个细节问题
  ● 网上注册一个域名的意义
  ● 网站从建设到运营的5点注意
  ● 8种提高网站ALEXA排名的方法
  ● 搜索引擎之间的4个区别
  ● 网站优化基本搜索引擎优化篇
  ● 点评A8音乐商业模式
  ● 5种不可取的网站推广方法
  ● SNS将成四大门户竞争的关键筹码
  ● 企业整站优化的一些技巧
  ● 马化腾创业三问
  ● 站长们每天都要做的工作
   网站优化与排名
  ● 快速提升访问量的方法
  ● 网站优化关键词工具,优化软件,SEO优化工具,SEO优化软件
  ● 总结四点分享我建站失败的经历
  ● 从达人圈到开心人人首谈SNS域名的选择与定位
  ● 良好心态是站长们成功的关键
  ● 浅谈做冷门站的一些心得体会
  ● 小游戏网站经营最重要的是站在用户的角度创新
  ● 关于网站首页打开速度之我见
  ● 谈一次域名解析出错带来的惨痛代价
  ● 我的地方论坛的建站之路经验总结
  ● 千人站长讲座第46期空姐网军哥谈特色社区运营
  ● 浅谈QQ类网站之站长的出路