您的位置:首页 > 其它

初次使用Winform抓取数据的一点心得

2015-07-28 11:50 543 查看
初次使用Winform抓取数据的一点心得
(一)字符串截取及正则表达式。

字符串截取主要使用的两个函数String.IndexOf()以及String.Substring(),前者主要找到需要截去的内容或者找到需要保存的内容,后者主要是截去不需要的内容。两者混合使用即可得到想要的内容。或者使用正则表达式做字符串匹配。通过webBrowser加载网页,并获取其中的HTML的元素。例如获取<div>标签:

webBrowser1.Document.GetElementsByTagName("div");这就获取到了HTML中的所有div标签元素。假设我们当前获取的一个div元素为item。那么item.InnerHtml或者 item.InnerText就获得了该div中的内容。之后我们就可以使用字符串截取或者是正则表达式匹配来获取相应的内容。

(二)webBrowser页面未加载完毕

在做数据抓取时,我们经常是抓取列表页中的内容,会涉及到切换页面的问题。有时,当我们要抓取一页的内容。但当前页面还没有加载完毕。数据内容为空时,我们该如何解决呢?

例如下面的例子
private void getlink()
{
this.webBrowser1.Navigate("http://www.csdn.net/");
List<string> list = getAlllink();
}

private List<string> getAlllink()
{

List<string> list = new List<string>();
try
{
foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("a"))
{
string link = item.GetAttribute("href");
if (link != null)
{
list.Add(link);
}
}
}
catch (Exception e)
{

}
return list;
}
需求上要在this.webBrowser1.Navigate("http://www.csdn.net/");执行完毕之后List<string>
list = getAlllink();再执行。可实际情况中页面还没加载完成。List<string> list = getAlllink();已经执行。这样我们就不能得到想要的效果。这时我们就可以使用WebBrowser.DocumentCompleted。具体使用如下
private void getlink()
{
this.webBrowser1.Navigate("http://www.csdn.net/");
this.webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebDocCompleted);
}

private void WebDocCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
this.webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(WebDocCompleted);
List<string> list = getAlllink();
}

private List<string> getAlllink()
{

List<string> list = new List<string>();
try
{
foreach (HtmlElement item in webBrowser1.Document.GetElementsByTagName("a"))
{
string link = item.GetAttribute("href");
if (link != null)
{
list.Add(link);
}
}
}
catch (Exception e)
{

}
return list;
}
这样就可以达到预期效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: