使用正则表达式替代 HTML 解析
Posted
技术标签:
【中文标题】使用正则表达式替代 HTML 解析【英文标题】:Alternative to HTML Parsing with Regex 【发布时间】:2012-04-20 23:29:08 【问题描述】:我在 node.js 中使用正则表达式解析 html 以返回一个字符串。但是,有人告诉我,在这篇文章中这不是一个好主意:Pull a specific string from an HTTP request in node.js
有哪些更稳定的替代方案?
我是编程新手,所以教程链接会很有帮助。我无法理解一些文档解释。
【问题讨论】:
您已经被告知该问题,但您可能应该阅读this 以完全了解情况。基本问题与正则表达式的“机器”模型的理论“力量”与解析像 HTML 这样的语言所需的东西有关。它与语言/自动机理论有关。 你可以看到这个:***.com/questions/7372972/… 【参考方案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.以上是关于使用正则表达式替代 HTML 解析的主要内容,如果未能解决你的问题,请参考以下文章