我需要抓取/删除静态非结构化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));
});
答案 0 :(得分:2)
如果没有结构化且没有CSS HTML,那么cheerio无法正常工作。所以,我在that tutorial
之后使用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
答案 1 :(得分:0)
使用选项所有小写标记,因为HTML可能包含混合TR
和 $ = cheerio.load(html, { lowerCaseTags: true });
:
$ = cheerio.load(html, { lowerCaseTags: true, lowerCaseAttributeNames : true });
你也应该为属性做同样的事情:
<!doctype HTML>
<html>
<head>
<title>HUSTLE PAY$</title>
<meta name="viewport" content="width = device - width, initial scale=1.0">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
希望有所帮助。