使用 nodejs 对非结构化 html 进行爬虫

Crawler over unstructured html with nodejs

我需要 crawl/scrap 静态非结构化 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));
});

使用选项 所有小写标签 因为 HTML 可能混合包含 trTR:

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

您也应该对属性执行相同的操作:

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

希望对您有所帮助。

在没有 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