• 巧用C#webbrowser以及Application.DoEvents實現采集動態網頁的爬蟲機器人

    0
    JavaScript Java C/C++ Go 數據采集 14093 次瀏覽
    從事網絡數據抓取采集已有很長的一段時間了,最開始是針對靜態網頁,寫正則表達式,從網絡上抓取信息。但是隨著工作的深入,
    發現很多網頁單單用正則表達式并不能完成抓取工作,比如很多網頁的下一頁鏈接是由JavaScript函數生成的比如
    <li><a href="#" onclick="javascript:gotoPage('2')">2</a></li>href
     url#httpresponse,httprequestjs
    怎么辦?

    可以采用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 void btnGo_Click(object sender, EventArgs e)
            {
                
    string url = comboBox1.Text.Trim();

                webBrowser1.Navigate(url);
            }

     
    private void btnBack_Click(object sender, EventArgs e)
            {
                webBrowser1.GoBack();
            }

    復制代碼

     

    光有前進和后退還不夠,我們希望當瀏覽器視圖刷新后,combobox里面的URL也跟著刷新,所以要再給瀏覽器添加一個Navigated事件,更新combobox顯示的文本。代碼如下:

     

     private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
            {
                comboBox1.Text 
    = webBrowser1.Url.ToString();
            }

     

     這還不夠,當你實現上述代碼時你會發現,你點擊webbrowser里面的鏈接時,會在本地IE中顯示新網頁,所以我們還需要添加一個NewWindow事件代碼如下

     

    webbrowser NewWindow

    復制代碼

    private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
            {
                e.Cancel 
    = true;
                
    if (webBrowser1.Document.ActiveElement != null)
                {
                    webBrowser1.Navigate(webBrowser1.Document.ActiveElement.GetAttribute(
    "href"));
                    comboBox1.Text 
    = webBrowser1.Document.ActiveElement.GetAttribute("href");
                }

            }

    復制代碼

     

     實現了如上代碼,那么程序中就配置好了一個簡易的IE瀏覽器了。剩下的問題就是如何設計爬蟲邏輯,形成自動爬蟲機器人了(這里聲明一下:本篇博文僅提供一個自動爬蟲機器人的框架性思路,至于如何捕獲具體的網頁信息塊兒BOI(block of interest)還需要根據網頁的具體情況配置不同的模板。

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色