2013-08-23 2 views
1

Я пытаюсь проанализировать некоторые данные с сайта, чтобы получить конкретные элементы из их таблиц. Я знаю, что любой тег с атрибутом bgcolor, установленным на #ffffff или # f4f4ff, - это то, где я хочу начать, и мои фактические данные находятся во втором в этом.Анализ HTML с помощью VB DOTNET

В настоящее время у меня есть:

Private Sub runForm() 


    Dim theElementCollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("TR") 
    For Each curElement As HtmlElement In theElementCollection 
     Dim controlValue As String = curElement.GetAttribute("bgcolor").ToString 
     MsgBox(controlValue) 
     If controlValue.Equals("#f4f4ff") Or controlValue.Equals("#ffffff") Then 

     End If 
    Next 
End Sub 

Этот код получает элемент TR, что мне нужно, но я понятия не имею, как (если это возможно), чтобы затем исследовать внутренние элементы. Если нет, как вы думаете, лучший маршрут? Сайт на самом деле не помещает ни одну из своих таблиц. «S я ищу в основном выглядеть следующим образом:

<td><b><font size="2"><a href="/movie/?id=movieTitle.htm">The Movie</a></font></b></td> 

Я хочу, чтобы вытащить„The Movie“текст и добавить его в текстовый файл.

ответ

0

Используйте InnerHtml свойства HtmlElement объекта (curElement) у вас есть, например:

For Each curElement As HtmlElement In theElementCollection 
    Dim controlValue As String = curElement.GetAttribute("bgcolor").ToString 
    MsgBox(controlValue) 
    If controlValue.Equals("#f4f4ff") Or controlValue.Equals("#ffffff") Then 
     Dim elementValue As String = curElement.InnerHtml 
    End If 
Next 

Прочитайте документацию HtmlElement.InnerHtml Property для получения дополнительной информации.

UPDATE:

Чтобы получить второй дочерний <tr> HTML элемента, используйте комбинацию из FirstChild, а затем NextSibling, как это:

For Each curElement As HtmlElement In theElementCollection 
    Dim controlValue As String = curElement.GetAttribute("bgcolor").ToString 
    MsgBox(controlValue) 
    If controlValue.Equals("#f4f4ff") Or controlValue.Equals("#ffffff") Then 
     Dim firstChildElement = curElement.FirstChild 
     Dim secondChildElement = firstChildElement.NextSibling 

     ' secondChildElement should be the second <td>, now get the value of the inner HTML 
     Dim elementValue As String = secondChildElement.InnerHtml 
    End If 
Next 
+0

Спасибо! Очень полезно. Моя единственная проблема в том, что я все еще один уровень слишком высок. Я получаю все элементы , а не только второй. Я всегда мог выполнить подстроку после нахождения местоположения в элементе Value второго , но это было бы неряшливо. Любая идея о том, как получить второй curElement? – Ooglybooglies

+0

См. 'UPDATE:' в моем ответе. –

+0

Это сработало отлично. Используя Dim elementValue As String = secondChildElement.InnerText, а не InnerHtml, мне удалось извлечь текст «The Movie» так же, как мне нужно. Я бы голосовал как полезный, но поскольку я должен был создать новую учетную запись, я пока не могу. Ха-ха. Хорошего дня! – Ooglybooglies

Смежные вопросы