使用正则表达式替代 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 解析的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式解析 Oracle 脚本

爬虫之汽车之家(正则表达式)

python替代正则表达式搜索返回元组无

Python从零开始写爬虫-2 使用正则表达式解析HTML

Python 使用正则表达式解析 HTML

您能否提供一些示例说明为啥使用正则表达式难以解析 XML 和 HTML? [关闭]