巧用C#webbrowser以及Application.DoEvents()实现采集动态网页的爬虫机器人
2010-10-28 18:20
489 查看
作者:finallyliuyu (转载请注明作者:finallyliuyu,出处:博客园)
可以采用DOM+正则+浏览器组件来解决上面的问题。
DOM (Document Object Model),是一个接口标准,该接口是将html网页解析成为树的格式,关于DOM的教程,请见:http://www.w3.org/DOM/ 虽然上面讲的是JavaScript的 DOM 接口函数,但是由于DOM是一个接口标准,其他语言实现的DOM接口也是大同小异的。
正则表达式:在完成文本匹配方面有着不可或缺的作用,这个powerful的工具,DOM是无法取代的。
浏览器组件: 包含解释JS语句的功能,有了浏览器组件的帮忙,我们的工作会更加省力(另外:园子里有网友建议什么Xpath,webrequest等等,没有用过,如果有人在这方面比较熟悉不妨交流下)
本功能采用VS2008 C# Winform 平台
在此平台下调用正则要在程序的头部加入声明:
using System.Text.RegularExpressions;
调用DOM组件,需要在工程的引用中加入Microsoft.mshtml
浏览器组件用的是webbrowser
首先我们要在程序中构造一个简单的浏览器,要有一个combobox列表框(显示当前网页的URL),前进和后退按钮,控制浏览器刷新视图 实现代码如下:
点击当前页下一页的函数
private bool AnchorNextPage()
{ bool rstStatus=false;
.......中间的代码是利用正则表达式和DOM函数(如GetElementByTagName,GetElementById等)定位到当前页的下一页链接
if (htmlElemNext != null)
{
mshtml.IHTMLElement anchor = (mshtml.IHTMLElement)htmlElemNext.DomElement;
anchor.click();//模拟点击
rstStatus=true;
}
return rstStatus;
}
附:感谢 naber 千羽 碧水寒潭 等几位园友 在博问中为我解惑。
从事网络数据抓取采集从本科毕设算起已有一年多的时间,最开始是针对静态网页,写正则表达式,从网络上抓取信息。但是随着工作的深入,
发现很多网页单单用正则表达式并不能完成抓取工作,比如很多网页的下一页链接是由JavaScript函数生成的比如
<li><a href="#" onclick="javascript:gotoPage('2')">2</a></li>这样的网页,即便你用正则表达式,提取到了href也无法获得下一页链接。
另外 如果url中还有“#”字段的,用httpresponse,httprequest获取的网页源码流与你在浏览器中所看到的页面视图也是不同的,因此单单用正则表达式,则处理起还有js脚本的动态网页就显得力不从心了。
怎么办?
可以采用DOM+正则+浏览器组件来解决上面的问题。
DOM (Document Object Model),是一个接口标准,该接口是将html网页解析成为树的格式,关于DOM的教程,请见:http://www.w3.org/DOM/ 虽然上面讲的是JavaScript的 DOM 接口函数,但是由于DOM是一个接口标准,其他语言实现的DOM接口也是大同小异的。
正则表达式:在完成文本匹配方面有着不可或缺的作用,这个powerful的工具,DOM是无法取代的。
浏览器组件: 包含解释JS语句的功能,有了浏览器组件的帮忙,我们的工作会更加省力(另外:园子里有网友建议什么Xpath,webrequest等等,没有用过,如果有人在这方面比较熟悉不妨交流下)
本功能采用VS2008 C# Winform 平台
在此平台下调用正则要在程序的头部加入声明:
using System.Text.RegularExpressions;
调用DOM组件,需要在工程的引用中加入Microsoft.mshtml
浏览器组件用的是webbrowser
首先我们要在程序中构造一个简单的浏览器,要有一个combobox列表框(显示当前网页的URL),前进和后退按钮,控制浏览器刷新视图 实现代码如下:
点击当前页下一页的函数
private bool AnchorNextPage()
{ bool rstStatus=false;
.......中间的代码是利用正则表达式和DOM函数(如GetElementByTagName,GetElementById等)定位到当前页的下一页链接
if (htmlElemNext != null)
{
mshtml.IHTMLElement anchor = (mshtml.IHTMLElement)htmlElemNext.DomElement;
anchor.click();//模拟点击
rstStatus=true;
}
return rstStatus;
}
附:感谢 naber 千羽 碧水寒潭 等几位园友 在博问中为我解惑。
相关文章推荐
- 巧用C#webbrowser以及Application.DoEvents()实现采集动态网页的爬虫机器人
- 巧用C#webbrowser以及Application.DoEvents()实现采集动态网页的爬虫机器人
- C#多线程使用webbrowser实现采集动态网页的爬虫机器人
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- C# 等待框----Application.DoEvents()实现
- C# 等待框----Application.DoEvents()实现
- c#关于网页内容抓取,简单爬虫的实现。(包括动态,静态的)
- C#网页数据采集(二)WebBrowser
- C# Application.DoEvents() 处理队列消息,防界面假死。
- C#中的webBrowser控件加载网页时实现进度显示
- 详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)
- C#Application.DoEvents()
- python爬虫日志(13)selenium实现淘宝自动翻页以及在新的标签页中打开网页
- 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站
- ASP.NET MVC5 实现网址伪静态用c#中的WebBr用c#中的WebBrowser抢小米F码,抢小米手机以及自动测试实现原理用c#中的WebBrowser抢小米F码用c#中的WebBrowser抢小米F码,抢小米手机以及自动测试实现原理
- .net C# WebBrowser实现网页自动填表
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
- 关于 Application.DoEvents 的实现