【问题标题】:Alternative to HTML Parsing with Regex使用正则表达式替代 HTML 解析
【发布时间】:2012-04-20 23:29:08
【问题描述】:

我在 node.js 中使用正则表达式解析 HTML 以返回一个字符串。但是,有人告诉我,在这篇文章中这不是一个好主意:Pull a specific string from an HTTP request in node.js

有哪些更稳定的替代方案?

我是编程新手,所以教程链接会很有帮助。我无法理解一些文档解释。

【问题讨论】:

  • 您已经被告知该问题,但您可能应该阅读this 以完全了解情况。基本问题与正则表达式的“机器”模型的理论“力量”与解析像 HTML 这样的语言所需的东西有关。它与语言/自动机理论有关。
  • 你可以看到这个:stackoverflow.com/questions/7372972/…

标签: javascript regex parsing node.js


【解决方案1】:

node-htmlparser 处理解析 HTML 的所有繁重工作。最重要的是,node-soupselect 允许您使用 CSS 样式的选择器来查找您正在寻找的特定元素。

然而,我看了你的另一个问题,你真正应该问的问题不是“我如何从 HTML 页面中抓取这些数据”,而是“有没有更好的方法检索我正在寻找的数据?”美国地质调查局有APIs that provide their data in machine-readable form。

Here's the JSON object for the location you're intersted in. 要获得水库表面高程的“最新瞬时值”,您可以下载该文件,执行var d = JSON.parse,然后:

for (var i = 0; i < d.value.timeSeries.length; i++) {
    if (d.value.timeSeries[i].variable.variableName == 'Elevation of reservoir water surface above datum, ft') {
        var result = d.value.timeSeries[i].values[0].value[d.value.timeSeries[i].values[0].value.length-1];
    }
}

result 现在看起来像 { dateTime: "2012-04-07T17:15:00.000-05:00", value: "1065.91" }。

【讨论】:

  • 我是否在http.get 回调中定义var d = JSON.parse 和for 语句?
  • http.get(..., function(res) { ... }); 将在建立连接并开始接收数据时调用您的回调——而不是在完成时。您必须侦听数据 (res.on('data', function(chunk) { ... });) 并缓冲传入的数据,然后您可以使用这些数据在 res 发出 end 时调用 JSON.parse(bufferString)。 See here for example.
猜你喜欢
  • 2014-06-08
  • 2014-05-16
  • 1970-01-01
  • 2014-06-26
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多