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

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

(一)字符串截取及正则表达式。

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

标签:

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 list = getAlllink();
        }

        private List getAlllink()
        {
           
            List list = new List();
            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 list = getAlllink();再执行。可实际情况中页面还没加载完成。 List 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 list = getAlllink();
        }


        private List getAlllink()
        {

            List list = new List();
            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;
        } 
这样就可以达到预期效果。




  

  


你可能感兴趣的:(数据抓取)