使用nodejssearch非结构化的html

我需要爬行/报废一个静态的非结构化的HTML,我试图得到一个nodejs代码的内容,我尝试使用cheerio和xpath失败。

http://static.puertos.es/pred_simplificada/Predolas/Tablas/Cnt/PAS.html

第一个得到的元素的Xpath是/ html / body / center / center / table / tbody / tr [3],然后我需要在TR中获取每个TD文本。

如果尝试获取tbody节点

var parser = new parse5.Parser(); var document = parser.parse(response.toString()); var xhtml = xmlser.serializeToString(document); var doc = new dom().parseFromString(xhtml); var select = xpath.useNamespaces({"x": "http://www.w3.org/1999/xhtml"}); var nodes = select("//x:tbody", doc); 

我总是收到一个[]节点。

随着cheerio我尝试迭代TR元素,但正如我上面提到的失败。

 var $ = cheerio.load(response); $('tr').each(function(i, e) { console.log("Content %j", $(e)); }); 

它接缝,cheerio无法正常工作与非结构化和没有CSS的HTML。 所以,我尝试了使用YQL的另一个解决方法

 select * from html where url='http://static.puertos.es/pred_simplificada/Predolas/Tablas/Cnt/PAS.html' and xpath='//html/body/center/center/table/tbody' 

与yql我正在得到我所需要的,所以我将它集成node-yql

使用选项全部小写标记,因为HTML可能包含混合trTR

  $ = cheerio.load(html, { lowerCaseTags: true }); 

你也应该为属性做同样的事情:

  $ = cheerio.load(html, { lowerCaseTags: true, lowerCaseAttributeNames : true }); 

希望有所帮助。