2013-12-14 41 views
0

我在C#中爲webbrowser製作了一個html抓取器,但我被卡住了。 該網頁看起來是這樣的:webBrowser只抓取元素中的第一個屬性(當所有的類都是相同的名稱時)

<tbody class="first class" 
    <tc class="second class"> 
    <td class=" ">abcdefg</td> 
    <td class=" ">1233456</td> 
    <td class=" ">qwertyo</td> 
    </tc> 

我用這個代碼來獲取裏面的「第二課堂」的三類內容:

HtmlElementCollection theElementCollection = default(HtmlElementCollection); 
     theElementCollection = webBrowser1.Document.GetElementsByTagName("tbody"); 
     foreach (HtmlElement curElement in theElementCollection) 
     {     
      curElement.GetElementsByTagName("tc"); 
      curElement.GetElementsByTagName("td");     

       label1.Text = curElement.GetAttribute("InnerText"); 
       return; 

     } 

的問題是,這個店在label1的ALL 3項內容,所以它看起來像這樣:

abcdefg123456qwerto 

因爲這些類都具有相同的名稱,所以我不能只抓取一個內容。

有沒有辦法只抓住元素內的第一個內容,使它看起來像這樣?

abcdefg 
+1

[0]?你必須在​​標籤上做foreach循環。 –

+0

當我把它放在它給我一個錯誤只有賦值,調用,增量等錯誤,並且當放入foreach循環時它表示標識符預期,但我不確定什麼標識符。 – John

+0

'curElement.GetElementsByTagName(「tc」)'你不使用返回的元素。 –

回答

2

未經測試

你已經嘗試curElement.GetElementsByTagName( 「TD」)
HtmlDocument document = WebBrowser.Document; 
if (document != null) {      
    HtmlElementCollection tableCollection = document.GetElementsByTagName("tbody"); 
    foreach (HtmlElement table in tableCollection) { 
     HtmlElementCollection trColl = table.GetElementsByTagName("tc"); 
     foreach (HtmlElement row in trColl) { 
      tds = row.GetElementsByTagName("td"); 
      if (tds != null && tds.Count > 1) { 

       string neededText = tds[0].InnerText; 
       // 1.iteration: neededText == abcdefg 
       // 2.iteration: neededText == 123456 
       // 3.iteration: neededText == qwertyo 

      } 
     } 
    } 
} 
+0

它應該可以正常工作,但它表示tds在當前上下文中不存在,並且當我將它聲明爲int時會出錯。 tds應該是什麼? – John

+0

它也不理解WebBrowser.Document。 – John

+0

tds基本上是一個存儲你的td對象的數組。 WebBrowser.Document應該等同於您的webBrowser1.Document。 –

相關問題