2012-12-12 33 views
0

我正在解析用於獲取某些信息的網頁的HTML。在我的網頁中,我有一個<table>正在嘗試訪問。但是當我寫下面的代碼時,返回0個元素:Web抓取 - 無法獲取網頁中的表格

WebBrowser csexBrowser = new WebBrowser(); 
HtmlElementCollection table2 = this.csexBrowser.Document.GetElementsByTagName("table"); 

在這裏,table2沒有任何內容。 0個元素。我使用winforms。編輯:This is the link。如果你搜索一個名字,那麼它會在表格中顯示一些結果。

+2

通常,當我遇到類似這樣的事情時,表格正在通過JavaScript添加,而不會被scraper解析。但我沒有檢查過這個例子 - 不知道這是否與你有關。 – Bobson

+0

@Bobson是對的。這在刮臉時會遇到一些問題。您的刮板需要能夠處理JavaScript,以便將動態行添加到表中。 – jlafay

+0

@jlafay:我將如何處理JavaScript呢? –

回答

0

在訪問您提供的鏈接之前有一個驗證步驟。在http://www.nsopw.gov/en-US/Search/Verification文檔中,沒有表格。

您確定先通過驗證網址嗎?

[編輯]

請試試這個:

public Form1() 
{ 
    InitializeComponent(); 
    WebBrowser csexBrowser = new WebBrowser(); 

    //here we say what we want to do when the Navigated event occurs 
    csexBrowser.Navigated += csexBrowser_Navigated; 

    //this takes some time 
    csexBrowser.Navigate("http://www.nsopw.gov/en-US/Search"); 
} 

void csexBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
{ 
    //here the document is loaded and we will find the table 
    HtmlElementCollection table2 = ((WebBrowser)sender).Document.GetElementsByTagName("table"); 
} 
+0

首先,你做一個驗證,然後你去搜索一個名字。然後,當你點擊搜索按鈕時,應該會出現一個表格 –

0

如果你堅持使用瀏覽器瀏覽,那麼你必須等待導航完成。就我個人而言,我討厭這種方法,再加上大多數人所追求的事件可以發現我已經找到的多重觸發器。

這樣做:

csexBrowser.Navigate(Url); 
     while (csexBrowser.ReadyState != WebBrowserReadyState.Complete) 
     { 
      Application.DoEvents(); 
     } 

只需導航到給定的URL,並且不繼續下去,直到頁面加載完成。 完成並完成。