我编写了这段代码,以便从用户插入的URL中获取html代码。 我使用了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
问题:
修改
当我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的barackets中添加什么吗? 我试过.InnerHtml,它也不起作用。
答案 0 :(得分:0)
如果您有URL,请使用 Load()
方法,如果您有html页面,请使用LoadHtml()
。在这种情况下,您似乎需要第一种方法:
htmlDoc.Load(htmlWeb)
正如您所说的那样,要获取body标签,您可以使用这个简单的XPath //body
更新:
我错过了HAP HtmlDocument
与XDocument
不同的事实,不能直接从Load
开始。该方法仅接受本地计算机中文件的路径。要从网址加载HtmlDocument
,您需要使用HtmlWeb
的{{1}}方法。试试这个:
Load()