【问题标题】:How to extract HTML source code using HTML Agility Pack in WinForms如何在 WinForms 中使用 HTML Agility Pack 提取 HTML 源代码
【发布时间】:2014-05-17 09:48:55
【问题描述】:

如何使用 HTML Agility Pack 提取 HTML 网站的某些部分(例如 this link 的代码)?

这是链接的样子 - 源代码和查看时:

{"target": "USD", "success": true, "rate": 1.682, "source": "GBP", "amount": 1.68, "message": ""}

我想要它所说的部分

1.682

我使用的是 VB.NET WinForms (Visual Basic 2010)。

我知道它可以使用 JSON 来处理,因为它是这样格式化的,但我更喜欢(如果可能的话)继续使用 VB.NET 并简单地下载源代码(这与可查看的完全相同)代码),然后提取有用的信息,除非有更好/更简单的 API。

此外,下载网站源代码后,如何删除部分字符串,例如删除前 x 个字符,然后删除最后 y 个字符?如果这很难或不可能,那么有没有办法删除某个单词之前的所有文本,以及某个单词之后的所有文本?

【问题讨论】:

  • 我认为您混淆了 JSON 和 AJAX。 JSON 是一种数据格式。 AJAX 是一种(典型的)Web 客户端技术。我建议使用 Newtonsoft JSON 解析器。
  • 那不是html,是JSON。
  • @Sriram 如果您查看主网站,他们会说它是 JSON 格式的。反正对我来说无所谓……

标签: vb.net winforms html-agility-pack


【解决方案1】:

您无法使用 HTMLAgiligyPack 解析 JSON(在 this SO answer 中解释)。

有很多方法可以做到这一点。最好和最安全的方法是使用JSON.NET 库(正如@Dan-o 已经建议的那样)来解析 JSON 响应:

dim response = "{""target"": ""USD"", ""success"": true, ""rate"": 1.682, ""source"": ""GBP"", ""amount"": 1.68, ""message"": """"}"
dim responseObject = CType(JsonConvert.DeserializeObject(response), JObject)
Console.WriteLine(responseObject.Property("rate").Value)

如果您确定响应总是以相同的顺序返回相同的字段,另一个简单(且幼稚)的解决方案是使用 String.SubstringString.Split

dim response = "{""target"": ""USD"", ""success"": true, ""rate"": 1.682, ""source"": ""GBP"", ""amount"": 1.68, ""message"": """"}"
' remove the leading curly brace {
response = response.Substring(1)
' remove the last curly brace }
response = response.Substring(0, response.Length - 1)
' split on , - result is blocks "key:value"
dim tokens = response.Split(",")
' take the 3th one "rate:nn.nnn", split on :
dim rate = tokens(2).Split(":")
' take the second value from the array at index 1
Console.WriteLine(rate(1))

回复是:

1.682

【讨论】:

  • 谢谢!将尝试。
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多