Грешка в Xpath при използване на .innertext във vb

Написах тази част от кода, за да получа html кода от URL адрес, въведен от потребителя. Използвах HtmlAgilityPack, защото искам да работя само с определени части от кода (тяло, заглавие и т.н.). Успях да „изтегля“ данните от уебсайта, но предполагам, че моят Xpath код е някак си неправилен. Ето съответния код:

Dim htmlWeb As String = URL (inserted by the user)
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    htmlDoc.LoadHtml(htmlWeb)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNodeCollection = htmlDoc.DocumentNode.SelectNodes("...")
    htmlText = myBR("...").InnerText

    For Each Match_Positive_Word As Match In Regex.Matches(htmlText, Positive_Words)
        Positive_Counter = Positive_Counter + 1
    Next

    For Each Match_Negative_Word As Match In Regex.Matches(htmlText, Negative_Words)
        Negative_Counter = Negative_Counter + 1
    Next

Въпроси:

  • Какво трябва да напиша в скобите, за да получа например данните в тага body?
  • Правилна ли е връзката ми с html кода? Има ли по-добър или по-ефективен начин да направите това?

РЕДАКТИРАНЕ

Когато направя htmlDoc.Load(htmlWeb), това ми дава грешка: URI форматите не се поддържат. Но когато направя LoadHtml, изглежда, че работи. Основният проблем е в реда htmlText = myBR.InnerText., който връща грешката: Препратката към обект не е зададена на екземпляр на обект. Ето какво написах:

Dim htmlWeb As String = URL
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    htmlDoc.LoadHtml(htmlWeb)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNode = htmlDoc.DocumentNode.SelectSingleNode("//body")
    htmlText = myBR().InnerText

Има ли нещо, което трябва да добавя в пакетите на myBR? Пробвах .InnerHtml и той също не работи.


person ILoveMom    schedule 19.04.2014    source източник
comment
изпробвах прост wiki url - en.wikipedia.org/wiki/HTML   -  person ILoveMom    schedule 19.04.2014
comment
добре, актуализирах отговора си. Оказа се, че методът Load() на HtmlDocument не поддържа зареждане на xml от уеб URL.   -  person har07    schedule 20.04.2014


Отговори (1)


Използвайте метода Load(), ако имате URL адреса, и използвайте LoadHtml(), ако имате html страницата. Изглежда, че имате нужда от първия метод в този случай:

htmlDoc.Load(htmlWeb)

Както попитахте като пример, за да получите етикет за тяло, можете да използвате този прост XPath //body

АКТУАЛИЗАЦИЯ:

Пропуснах факта, че HtmlDocument на HAP, за разлика от XDocument, не може да Load директно от URL. Методът приема само пътя до файл в локалната машина. За да заредите HtmlDocument от URL, трябва вместо това да използвате метода Load() на HtmlWeb. Опитайте по този начин:

Dim htmlWeb As New HtmlWeb
Dim htmlDoc As HtmlAgilityPack.HtmlDocument = htmlWeb.Load(URL)
Dim htmlText As String
    htmlDoc.OptionFixNestedTags = True
Dim myBR As HtmlNode = htmlDoc.DocumentNode.SelectSingleNode("//body")
    htmlText = myBR().InnerText
person har07    schedule 19.04.2014