用node.jsparsing奇怪的html

我试图parsing一个网站,但HTML是一团糟。 任何人有更多的parsing网站的经验帮助我?

<tr> <td><font FACE=Tahoma color='#CC0000' size=2><b>Date</b></font></td> <td><font FACE=Tahoma color='#CC0000' size=2><b>Place</b></font></td> <td><font FACE=Tahoma color='#CC0000' size=2><b>Situation</b></font></td> </tr> <tr><td rowspan=2>16/09/2011 10:11</td><td>New York</td><td><FONT COLOR="000000">Situation Red</font></td></tr> <tr><td colspan=2>Optional comment hello new york</td></tr> <tr><td rowspan=2>16/09/2011 10:08</td><td>Texas</td><td><FONT COLOR="000000">Situation Green</font></td></tr> <tr><td colspan=2>Optional comment hello texas </td></tr> <tr><td rowspan=1>06/09/2011 13:14</td><td>California</td><td><FONT COLOR="000000">Yellow Situation</font></td></tr> </TABLE> 

一个奇怪而疯狂的事情是评论不在桌子的头顶也是起点(加州)没有评论。 所以,起点总是会是这样的:

date:06/09/2011 13:14

地点:加州

情况:黄色情况

评论:null

所有其他地方都有评论,并将是这样的:

date:16/09/2011 10:11

地点:纽约

情况:情况红色

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

我已经尝试了一些方法,但是对于node.js并没有多less经验,而对于HTMLparsing却没有太多经验。 我需要开始parsing疯狂的东西。

我在node.js中构build了一个分布式的刮板。 我发现parsing通过html tidyparsing的html更容易。

这里是一个通过整洁运行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'); tidy.html('<table><tr><td>badly formatted html</tr>', function(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>