使用node.js解析奇怪的html

使用node.js解析奇怪的html,node.js,html-parsing,Node.js,Html Parsing,我正在尝试解析一个站点,但是html太乱了。有更多解析网站经验的人能帮我吗 日期 位置 情况 2011年9月16日10:11纽约红色局势 可选评论你好,纽约 2011年9月16日10:08Texassiation绿色 可选评论你好,德克萨斯州 2011年9月6日13:14加州黄色局势 一件奇怪而疯狂的事情是,评论不在表格的最前面,也就是起点(加利福尼亚州)没有评论。所以,起点总是这样: 日期:2011年9月6日13:14 地点:加利福尼亚州 情景:黄色情景 注释:空 所有其他地方都有评

我正在尝试解析一个站点,但是html太乱了。有更多解析网站经验的人能帮我吗


日期
位置
情况
2011年9月16日10:11纽约红色局势
可选评论你好,纽约
2011年9月16日10:08Texassiation绿色
可选评论你好,德克萨斯州
2011年9月6日13:14加州黄色局势

一件奇怪而疯狂的事情是,评论不在表格的最前面,也就是起点(加利福尼亚州)没有评论。所以,起点总是这样:

日期:2011年9月6日13:14

地点:加利福尼亚州

情景:黄色情景

注释:空

所有其他地方都有评论,如下所示:

日期:2011年9月16日10:11

地点:纽约

情况:情况红色

评论:可选评论你好,纽约。


我尝试过一些方法,但我对node.js没有太多经验,对HTML解析的经验更少。我需要开始解析疯狂的东西。

我在node.js中构建了一个分布式刮板。我发现更容易解析通过HTMLTidy解析的html

下面是通过tidy运行html的模块:

var spawn = require('child_process').spawn;
var fs = require('fs');

var tidy = (function() {
this.html = function(str, callback) {
    var buffer = '';
    var error = '';

    if (!callback) {
        throw new Error('No callback provided for tidy.html');
    }
    var ptidy = spawn(
        'tidy',
        [
            '--quiet',
            'y',
            '--force-output',
            'y',
            '--bare',
            'y',
            '--break-before-br',
            'y',
            '--hide-comments',
            'y',
            '--output-xhtml',
            'y',
            '--fix-uri',
            'y',
            '--wrap',
            '0'
        ]);

    ptidy.stdout.on('data', function (data) {
        buffer += data;
    });

    ptidy.stderr.on('data', function (data) {
        error += data;
    });

    ptidy.on('exit', function (code) {
        //fs.writeFileSync('last_tidy.html', buffer, 'binary');
        callback(buffer);
    });

    ptidy.stdin.write(str);
    ptidy.stdin.end();      
}
return this;
})();

module.exports = tidy;
示例(如果另存为tidy.js):

require('./tidy.js');
html('格式错误的html',函数(html){console.log(html);});
结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />
<title></title>
</head>
<body>
<table>
<tr>
<td>badly formatted html</td>
</tr>
</table>
</body>
</html>

格式错误的html

我在node.js中构建了一个分布式刮板。我发现更容易解析通过HTMLTidy解析的html

下面是通过tidy运行html的模块:

var spawn = require('child_process').spawn;
var fs = require('fs');

var tidy = (function() {
this.html = function(str, callback) {
    var buffer = '';
    var error = '';

    if (!callback) {
        throw new Error('No callback provided for tidy.html');
    }
    var ptidy = spawn(
        'tidy',
        [
            '--quiet',
            'y',
            '--force-output',
            'y',
            '--bare',
            'y',
            '--break-before-br',
            'y',
            '--hide-comments',
            'y',
            '--output-xhtml',
            'y',
            '--fix-uri',
            'y',
            '--wrap',
            '0'
        ]);

    ptidy.stdout.on('data', function (data) {
        buffer += data;
    });

    ptidy.stderr.on('data', function (data) {
        error += data;
    });

    ptidy.on('exit', function (code) {
        //fs.writeFileSync('last_tidy.html', buffer, 'binary');
        callback(buffer);
    });

    ptidy.stdin.write(str);
    ptidy.stdin.end();      
}
return this;
})();

module.exports = tidy;
示例(如果另存为tidy.js):

require('./tidy.js');
html('格式错误的html',函数(html){console.log(html);});
结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />
<title></title>
</head>
<body>
<table>
<tr>
<td>badly formatted html</td>
</tr>
</table>
</body>
</html>

格式错误的html

try:try:我能够使用require('htmlidy/htmlidy.js')让这个模块工作-仅供从npm下载它的任何人参考:-)我能够使用require('htmlidy/htmlidy.js')让这个模块工作-仅供从npm下载它的任何人参考:-)