C#爬取动态网页
来源:互联网 发布:unity3d 上海 外包 编辑:程序博客网 时间:2024/06/05 06:11
一直在尝试用java来爬取网页,然而java总是无法处理动态网页,尤其是js产生的网页。而在如今的web2.0时代,许多的数据都涉及到js,比如新闻评论、微博等。java中htmlparser和htmlunit结合是可以处理静态网页、提交表单的,如爬取人人网,但对于新闻评论就没办法了。也有一些号称可以处理动态网页的开源项目,如jrex等一些开源的浏览器项目。但是我试过之后,总是不能很好的解决,有的可能能处理一小部分的动态网页,但是总是有这样那样的问题,也没有找出处理js后的源码。
一直听说c#中的webbrowser可以处理几乎所有的动态网页,功能很强大。只是之前借用朋友的代码看了看,并从webbrowser执行后的html打印出来(webBrowser1.DocumentText),可发现也是没有执行js之前的源码。于是对其很失望,找了很多的代码发现都是如此。后来再csdn下了一个代码,发现要获取webbrowser执行后的html源码不是我以前看到的,而是webBrowser1.Document.Body.OuterHtml,才恍然大悟。总算找到了出路。
保存源码到文件
private int SaveToFile(string body, string fileName)
{
try
{
FileStream fs = new FileStream("E:\\"+fileName + ".html", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.Write(body);
sw.Close();
fs.Close();
return 1;
}
catch
{
return 0;
}
}
执行js代码
webBrowser1.Navigate("javascript:[你要执行的javascript语句];");
利用我要获取sohu评论,则可以:
int i = 1;
while (i < 1004)
{
// while(webBrowser1.ReadyState != WebBrowserReadyState.Complete)
// Thread.Sleep(5000);
SaveToFile(webBrowser1.Document.Body.OuterHtml,"down"+i.ToString());
i ++;
webBrowser1.Navigate("javascript:pageGo(" + i.ToString() + ",364)");
MessageBox.Show("javascript:pageGo(" + i.ToString() + ",364)");
Thread.Sleep(5000);
}
或者调用js函数执行
private void callJsMethod(string jsfun,string jsParameter)//函数名字,函数参数
{
HtmlDocument doc = webBrowser1.Document;
doc.InvokeScript(jsfun,new object[]{jsParameter});
}
提交表单
例如登陆腾讯微博
webBrowser1.Document.GetElementById("u").InnerText = "*9492522*";//fill name
webBrowser1.Document.GetElementById("p").InnerText = "******";//fill pwd
HtmlElementCollection submit = webBrowser1.Document.All;
foreach (HtmlElement element in submit)
{
string str = element.GetAttribute("type");
if (str == "submit")
{
element.InvokeMember("click");
}/*这一种也可以
if (element.TabIndex == 5)
{
element.InvokeMember("click");
}*/
}
参考:http://topic.csdn.net/u/20090502/15/a61bca98-4aaf-42e6-9c81-97dfd302a23e.html
- C#爬取动态网页
- 爬取网页动态数据
- 爬取动态的网页。
- 爬取网页动态内容
- c#爬取Silverlight网页
- c#爬取Silverlight网页
- python爬取百度搜索动态网页
- selenium+ phantomjs实现动态网页爬取
- selenium+ Phantomjs爬取动态网页
- python爬取静态和动态网页
- Scrapy+phantomjs爬取动态网页数据
- python + Scrapy 爬取动态网页
- c#爬取Silverlight网页 2
- 动态网页爬取例子(WebCollector+selenium+phantomjs)
- selenium+webdriver爬取动态网页介绍_python
- 网络爬虫:爬取动态网页(例如javascript)
- 定向爬虫:动态加载网页的爬取
- 用python+selenium+firefox爬取动态网页
- Eclipse中ICTCLAS 2011 的java调用
- 情感词生成 [opinion mining]
- CSS 中background-img 的相关属性
- POJ 3821 Clickomania
- POJ 3842 排列问题
- C#爬取动态网页
- poj 3899 The Lucky Numbers
- poj解题报告整理
- poj 3847 树(链接表与堆栈的实现)
- poj 3865 数据库冗余问题判断
- 利用Stanford Parser进行中文行为抽取
- C++及Java连接MySQL方法
- HIT LTP的使用及利用句法关系简单抽取示例
- Java中Object的使用:重载equals、hashCode及实现compareTo